c语言中使用scanf函数的多组输入问题详解

您所在的位置:网站首页 scanf的返回值是输入数据的个数 c语言中使用scanf函数的多组输入问题详解

c语言中使用scanf函数的多组输入问题详解

2023-05-18 16:31| 来源: 网络整理| 查看: 265

scanf函数的多组输入问题详解 C语言中的多组输入问题及解答scanf在没有读取到数值时会返回EOFC语言中的EOF是什么?多组输入的实现如何结束scanf函数的多组输入

C语言中的多组输入问题及解答

相信很多朋友在学习c语言的过程中都遇到过需要多组输入的问题,比如下面这个题目:

例:据说智商140以上者称为天才,KiKi想知道他自己是不是天才,请帮他编程判断。输入一个整数表示一个人的智商,如果大于等于140,则表明他是一个天才,输出“Genius”。请采用多组输入,每行输入包括一个整数表示的智商。

官方给出的答案是这样的

#include int main() { int iq = 0; while (scanf("%d", &iq) != EOF) { //循环读入iq的值,对于满足要求的进行输出即可 if (iq >= 140) printf("Genius\n"); } return 0; }

运行结果: 在这里插入图片描述 那么现在就有很多人问了,这个代码里面的EOF是什么东西,这个代码又是如何实现多组输入的呢?下面我们就来讨论一下这些问题。

scanf在没有读取到数值时会返回EOF

scanf() 是 C 语言中一个常用的输入函数,用于从标准输入设备(如键盘)读取数据,并按照给定的格式将读取到的数据存储到指定的变量中。

scanf函数在读取成功时,返回值是它所读取到数据的个数。 例如我们输入:1 2,返回值便是2。输入:1 2 3,返回值便是3。

如果键盘中输入的数据类型与代码里的格式字符不匹配时,返回值为 0。 例如,scanf("%d",&a);代码里的格式字符为%d(十进制整数),我们输入的是英文字母,那么scanf函数就会读取失败,这种失败形式下的返回值为0。

如果输入缓冲区中没有数据可供读取时,scanf() 函数会一直等待输入数据,直到有数据可供读取或者达到了指定的超时时间(如果有指定的话)。如果等待超时,scanf() 函数会返回 EOF。

如果输入数据长度超过了指定的最大值时:在指定了读取数据的最大长度,并且输入数据的长度超过了这个最大值时,就会发生缓冲区溢出,scanf() 函数会读取失败,返回值为 EOF。

C语言中的EOF是什么?

简单来说,EOF(End of File)是C语言中一个特殊的常量,用于表示文件的结束。

在vs编译器里我们对EOF转到定义可以看到#define EOF (-1),也就是说EOF在c语言中被定义为-1。

所以scanf返回值EOF,也可以说成scanf返回值为-1。 在这里插入图片描述

在这里插入图片描述

多组输入的实现

在例题所示范的代码中,scanf函数在读取到一个整数时,返回值为1。 因为EOF=-1,所以在while循环的判断中,1!=EOF成立,进入循环。 在循环体中,程序判断该所读整数是否大于等于 140。如果大于等于 140,则会输出字符串 “Genius”,进行下一次循环。否则,程序会跳过这次循环,直接进行下一次循环读取下一个整数。

如何结束scanf函数的多组输入

既然多组输入可以无限循环下去,那我们要如何跳出这个循环呢? 最简单的方法自然是停止编译,除此之外我们还通过在输入时判断文件结束符来跳出循环。 在 Windows 平台上,文件结束符为 Ctrl+Z;在 Linux 和 macOS 平台上,文件结束符为 Ctrl+D。当输入文件结束符时,scanf() 函数会返回 EOF。 所以在windows平台上,输入Ctrl+Z回车即可跳出循环。在 Linux 和 macOS 平台上,输入Ctrl+D回车即可跳出循环。 值得一提的是,在vs2019的编译器中有个小小的bug,我们需要连续输入三次Ctrl+Z回车才能跳出循环结束程序。 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3