【C语言】scanf多组输入的三种方法!

这篇具有很好参考价值的文章主要介绍了【C语言】scanf多组输入的三种方法!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


scanf如何输入多个数,《C语言初级篇》,c语言,开发语言,热门文章,青少年编程,算法

🎬 鸽芷咕:个人主页

 🔥 个人专栏:《C语言初阶篇》 《C语言进阶篇》
⛺️生活的理想,就是为了理想的生活!

前言

   🌈hello! 各位宝子们大家好啊,相信大家都多多少少了用过scanf语句吧,但是对scanf函数没有全面的认识仅仅只是知道可以输入。
   ⛳️今天博主就给大家介绍一下scanf函数,以及在《牛客网》写题时遇到的多组输入该如何解决?
   📚本期文章收录在《C语言初阶篇》,大家有兴趣可以看看呐
  ⛺️ 欢迎铁汁们 ✔️ 点赞 👍 收藏 ⭐留言 📝!

💬 scanf( ) 函数的介绍

📜说明:

🔥 关于scanf( )我们在C++官网看一下
scanf如何输入多个数,《C语言初级篇》,c语言,开发语言,热门文章,青少年编程,算法
📚 注:关于scanf的参数类型官网上描述太复杂了,所以博主就不截取了。

  • 由博主给大家讲解讲解讲解关键点

scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。
函数的原型为:

# include <stdio.h>
int scanf(const char *format, ...);

💬 scanf( )的俩种用法

🌱示例一:

scanf(“输入控制符”, 输入参数);

# include <stdio.h>
int main(void)
{
    int i;
    scanf("%d", &i);  //&i 表示变量 i 的地址,&是取地址符
    printf("i = %d\n", i);
    return 0;
}

⛳️输入控制符
  • 🌲“输入控制符”和“输出控制符”是一模一样的。
  • 🌲 比如一个整型数据,通过 printf 输出时用%d输出,通过 scanf 输入时同样是用%d。

📌 那么为什么需要输入控制符呢 ?

  • 首先我们要清楚,我们从键盘输入的全部都是字符。比如从键盘输入 123,它表示的并不是数字 123,而是字符 ‘1’、字符 ‘2’ 和字符 ‘3’。
  • 操作系统在接收键盘数据时都将它当成字符来接收的。这时就需要用“输入控制符”将它转化一下。%d的含义就是要将从键盘输入的这些合法的字符转化成一个十进制数字。经过 %d 转化完之后,字符 123 就是数字 123 了。

📌 使用&取地址操作符的作用

  • &是一个取地址运算符,&后面加变量名表示“该变量的地址”。
  • &i又称为“取地址i”,就相当于将数据存入以变量 i 的地址为地址的变量中。

📝 注:所以这里scanf 语句的意思就是:从键盘上输入字符 123,然后%d将这三个字符转化成十进制数 123,最后通过 “取地址 i” 找到变量 i 的地址,再将数字 123 放到以变量 i 的地址为地址的变量中。

⛳️ 输入参数

注:输入参数就是键盘上的字符

  • 常用输入控制符
    📚 附录:
输入控制符 格式描述
%d 整型格式
%ld 长整型格式
%lld long long 格式
%f 单精度浮点型格式
%lf 双精度浮点型格式
%p 地址的格式
%c 字符格式
%s 字符串格式
%p 地址的格式
🌱示例二:

scanf(“输入控制符非输入控制符”, 输入参数);
这种用法几乎是不用的,也不建议你们使用。

  • 但是经常有人问,为什么 printf 中可以有“深红色文字 非输出控制符”,而 scanf 中就不可以有“非输入控制符”。事实上不是不可以有,而是没有必要!

🔥 注: 输出控制符,我们前面讲了的大家没记住的可以去看看。

不知道大家理解了嘛? 不理解也没关系演示一边就懂了
🏅 咱们是就是说,实践出真理。

📖 代码演示:

# include <stdio.h>
int main( )
{
    int i;
    scanf("i = %d", &i);
    printf("i = %d\n", i);
    return 0;
}

💭 运行结果:
scanf如何输入多个数,《C语言初级篇》,c语言,开发语言,热门文章,青少年编程,算法
注:在 printf 中,所有的“非输出控制符”都要原样输出。同样,在 scanf 中,所有的“非输入控制符”都要原样输入。

  • 🌱所以在输入的时候,i= 必须要原样输入。
  • 🌱比如要从键盘给变量 i 赋值 123,那么必须要输入i=123才正确,少一个都不行,否则就是错误。
    scanf如何输入多个数,《C语言初级篇》,c语言,开发语言,热门文章,青少年编程,算法

💬 scanf( )的返回值

这是我们本期的重点,想要知道scanf( ) 是如何多组输入的就,必须要弄懂它的返回值。

scanf如何输入多个数,《C语言初级篇》,c语言,开发语言,热门文章,青少年编程,算法
⛳️ 大家看参考文献这里说:

  • 成功时,返回成功填充的参数列表的项数。
  • 失败时,返回EOF
📖 EOF的含义

EOF在C语言中是这样定义的:

  • #define EOF (-1)
  • 它的意思就是由#define定义的EOF为-1
  • 所以当scanf返回失败的时候返回的就是-1

那么怎么样返回错误呢?

  • 🌱ctrl+z会让 scanf 或者 getchar 返回EOF就可以啦!
  • 🌱注:在VS 2022等编译器需要按3次ctrl+z才能返回EOF。

💬scanf( )的三种多组输入方式

⛳️ 利用返回值多组输入

☁️ 首先我们就得了解scanf( )的返回值而上面博主也讲过这样一句话:

scanf( )接收成功的返回值

  • 📜 成功时,返回成功填充的参数列表的项数。

这是什么意思呢?写一段代码大家就明白了。

# include <stdio.h>
int main()
{
    int i = 0;
    int a = 0;
    int ret = scanf("%d%d", &i, &a);
    printf("ret = %d\n", ret);
    return 0;
}

📑运行结果:
scanf如何输入多个数,《C语言初级篇》,c语言,开发语言,热门文章,青少年编程,算法
💡 这估计大家都明白了!哦,原来scanf函数接收成功时返回的是填充的参数列表的项数。

📖问题引入:

那么想多组输入还不简单吗?直接循环不就完了

  • 让它只要没读取错误就一直循环,而返回成功的值我们已经知道了。
int main()
{
    int i = 0;
    while (scanf("%d", &i) ==1)
    {
        printf("i = %d\n", i);
    }       
    return 0;
}

📑运行结果:
scanf如何输入多个数,《C语言初级篇》,c语言,开发语言,热门文章,青少年编程,算法

⛳️ 利用EOF多组输入

scanf( )接收失败的返回值

  • 📜 scanf返回失败的时候返回的就是EOF,其实就是返回-1。

这不就跟前面一样了嘛?我知道各位聪明的铁汁们一定想到了。

  • 只要返回不失败,不就可以多组输入了嘛!

📚 代码演示:

# include <stdio.h>
int main()
{
    int i = 0;
    while (scanf("%d", &i) != EOF)
    {
        printf("i = %d\n", i);
    }       
    return 0;
}

📑运行结果:
scanf如何输入多个数,《C语言初级篇》,c语言,开发语言,热门文章,青少年编程,算法

⛳️ 利用 ~ 按位取反操作符多组输入

前面说了scanf返回值是

  • 成功时,返回成功填充的参数列表的项数。
  • 失败时,返回EOF。也就是-1
  • 所以scanf的返回值是 >= -1 的。

而只有返回值为EOF(-1)的时候其取反(取反操作符~)的值才是0

💭 扩展:原反补的概念

🌱给大家扩展一下一个整数在C语言中存的是他的补码
⛳️ 原码就是它本身转化成二进制
⛳️ 反码按位取反 同0取1 同1取0
⛳️ 补码 反码加1
而-1的补码是:

  • -1的原码: 00000000 00000000 00000000 00000001
  • -1的反码: 11111111 11111111 11111111 11111110
  • -1的补码: 11111111 11111111 11111111 11111111

    🌱-1全部取反就是全0,就是0。
    而0正好可以作为循环结束的标志!
# include <stdio.h>
int main()
{
    int i = 0;
    while (~scanf("%d", &i))
    {
        printf("i = %d\n", i);
    }       
    return 0;
}

📑运行结果:
scanf如何输入多个数,《C语言初级篇》,c语言,开发语言,热门文章,青少年编程,算法

🎬 多组输入的牛客网链接

  📖俗话说,多写多练才能掌握一个知识。
  📑其实博主刚开始学C语言练题的时候就被多组输入给难倒了,但是搜索出来的解答大多讲的
不够细节易懂,所以今天分享给大家的都是最简单易懂的。
注:附带多组输入练习题。

编程初学者入门训练
BC51 三角形判断
BC75 数字三角形
⛳️ 预告一下呢!明天博主就会更新scanf和getchar中的缓冲区概念,所以一点要关注嗷铁汁们!

总结

✅ 归纳:
好了以上就是关于scanf()函数的及其返回值的全部用法了!
  scanf的参数
  scanf的返回值
  EOF的讲解
  利用返回值多组输入
  利用EOF多组输入
  利用 ~ 按位取反操作符多组输入
☁️ 学会这些大家就不会再为,scanf函数的多组输入给逼疯啦!
看到这里了还不给博主扣个 ⛳️ 点赞☀️收藏 ⭐️ 关注
💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。
scanf如何输入多个数,《C语言初级篇》,c语言,开发语言,热门文章,青少年编程,算法文章来源地址https://www.toymoban.com/news/detail-736601.html

到了这里,关于【C语言】scanf多组输入的三种方法!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • C语言--输入一个数判断是否为素数(多种方法)

    C语言--输入一个数判断是否为素数(多种方法)

     需要解决这个问题,首先我们要明白 --------什么是素数? (质数)素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 举个例子:4  可以 由2*2=4  和1*4 得到,不符合素数的条件,所以不是素数。                   5  只能由1*5 得到,符合素数的

    2024年01月25日
    浏览(12)
  • 【C语言】多组输入

    【C语言】多组输入

    目录 C系列文章目录 一、什么是多组输入? 二、如何使用多组输入 2.1,试题举例讲解  2.2,错误解法 2.3,我们实现多组输入的思路 2.4,第一种正确的解法 2.5,第二种正确的解法 2.6,多组输入的第二种输入方法  2.7,如何停止多组输入  总结 前言 我们学习C语言,从小白成

    2024年02月15日
    浏览(11)
  • 【C语言】判断字符类型的三种方法

    【C语言】判断字符类型的三种方法

    🦄 个人主页 :修修修也 🎏 所属专栏 :C语言 ⚙️ 操作环境 : Visual Studio 2022 目录 一.字符的类型分类 1.ASCII的定义:  2.ASCII的产生原因是: 3.ASCII的内容: 二.字符类型判断相关库函数 1.isdigit(),用于判断字符是否为数字。 2. isalpha(),用于判断字符是否为字母。 3. isalnum(),用

    2024年02月06日
    浏览(11)
  • C语言素数(质数)判断的三种方法

    本文介绍了判断素数的3种方法,从素数的概念分析,确定找到素数的几个必要条件,设计思路,并将代码进行优化。此外,还使用自定义函数的形式将同样的思路进行实现。 素数,就是仅能被自身和1整除的数字。 首先我们可以提取出判断素数的三个基本条件: 素数是整数

    2024年02月04日
    浏览(7)
  • C语言多组输入问题

    C语言多组输入问题

    目录 前言 scanf返回值介绍: EOF又是什么? 一、scanf的返回值等于输入参数的个数 二、scanf的返回值不等于EOF 三、对scanf的返回值按位取反(~) 如何结束? 如果您经常刷题就一定碰到过多组输入的问题,小编这里会三种多组输入的方式,下面小编为您介绍三种方式以及其背

    2024年02月15日
    浏览(8)
  • 多组的输入输出(C语言)

    多组的输入输出(C语言)

    当你想计算多组数字相加时,那就需要输入多个数字,在C语言中,一般一个scanf只能输入一组数据,那如何能同时输入多组数据呢? 例(一):  直接用while来解决,上代码: 例(二):     这个就更显而易见了,直接用while:  例(三):  例(四):     例(五):

    2024年02月08日
    浏览(14)
  • C语言笔记——结构体的三种打印方法

    C语言笔记——结构体的三种打印方法

    (看鹏哥C语言视频学的,自己做的笔记) 首先定义一个结构体(以学生的信息为例): 第一种 打印方法: 注意:age要对应%d,其余都是%s,其余三个顺序换了无所谓。 运行结果:   第二种 打印方法(函数+地址): 第三种 打印方法(与第二种方法类似,用箭头表示而已)

    2024年02月02日
    浏览(12)
  • 写一个函数返回参数二进制中 1 的个数(c语言三种实现方法)

    写一个函数返回参数二进制中 1 的个数(c语言三种实现方法)

    (本文旨在自己做题时的总结,我会给出不同的解法,后面如果碰到新的题目还会加入其中,等于是我自己的题库。 方法一: 方法二: 这里说一个方法,任何一个进制数%它的进制位都可以得到它的最低位,任何一个进制数 / 它的进制位都可以将最低位丢弃。比如: 这样我

    2024年02月13日
    浏览(50)
  • C语言:获得月份天数(多组输入)

    C语言:获得月份天数(多组输入)

    KiKi想获得某年某月有多少天,请帮他编程实现。 输入年份和月份 , 计算这一年这个月有多少天 。             输入描述: 多组输入 , 一行有两个整数 ,分别表示 年份和月份 , 用空格分隔 。               输出描述: 针对每组输入,输出为一行,一个整数,表示这一

    2024年02月12日
    浏览(12)
  • 【C语言】字母转换大小写的三种方法

    【C语言】字母转换大小写的三种方法

    🦄 个人主页 :修修修也 🎏 所属专栏 :C语言 ⚙️ 操作环境 : Visual Studio 2022 目录 方法一:库函数法 📌小写转换大写:toupper()函数 📌大写转换小写:tolower()函数 方法二:加减32法 📌小写转换大写:字符数据减32 📌大写转换小写:字符数据加32 方法三:位运算法 📌大小写

    2024年02月09日
    浏览(350)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包