初识C语言——浅析输入多组数据的情况

        本篇文章只用于浅浅解析多次输入一个数据,我知道的不多,如有大佬看到,期待你的补充和纠错

        在c语言的学习中,我们经常会见到这类题目要求“题目有多组输入数据”,这时需要我们反复多次读取整数的情况下,我们应该怎么做呢

我们来以这个例题举例:

        例:据说智商140以上的被称为天才,kk想知道自己是不是天才,现在需要多组输入一个整数,如果输入的数大于140,输出“Genius”(针对于每行的大于140的输入都返回)

如果是一次输入,它的代码段如下:

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

 它的运行结果如下

         不过很明显,这个不符合题意,虽然程序执行无误,不过却只能运行一次,不符合多组输出这一项要求,那么我们应该怎么做呢?

我们就需要来研究一下这个scanf函数。

首先打开这个网站:cplusplus.com - The C++ Resources Network

         我们可以看到scanf函数的返回类型是int整形变量,往下滑动可以看到

        scanf的返回值(Return Value)介绍,我们大致阅读可以知晓,在成功时,函数返回成功填充的参数列表的项数——也就是当输入的数值符合scanf参数要求时(即整形对应%d,字符型对应%c等等),scanf将返回与参数数目相同的数值,也就是有几个参数,返回数字几。我们可以在vs上稍加验证:

 

        如图可知,当我们将scanf的返回值放到变量ret内时,我们可以看到,正确输入了两个scanf要求的参数,就会返回一个数值2。

        而由这段大概翻译可知,如果发生读取错误或者读取到文件末尾,在正确读取之前发生以上任何一种情况,则会返回“end of file”也就是EOF。

        在知晓这两个逻辑后,我们就能有依据的写出满足“输入多组数据” 要求的代码。我们放在while循环中进行修正的代码:

 此时,我们将scanf放入while的循环条件中,因为只需输入一个参数,所以只要scanf返回值等于1,则循环进行。就会有图中的结果所示,想要停止循环,只需要按下键盘上的 “Ctrl+z"(不过vs这里有个bug,需要按三次”Ctrl+z“和回车才能结束程序)。

这是第一个修改方法

如下所示我们来介绍第二个修改方法,如下图所示 :

        当我们输入正确的scanf数值时,返回的数值就是1——也就不是EOF,当我们输入错误的时候sacnf会返回EOF,而此时在while循环中”while(EOF != EOF),这显然是错误逻辑,所以会跳出循环,也就有了如上的结果所示。原理都是根据scanf函数的认知而书写的程序,我们也要多多应用cplusolus等类的网站多多学习c语言中的陌生函数。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值