EOF理解
题目描述:这是测试的第一个问题。由于我们所知道的ASCII代码,您的工作很简单:输入数字和输出相应的消息。
输入:输入将包含由空格(空格、换行符、制表符)分隔的正整数列表。请处理到文件的末尾(EOF)。整数将不少于32。
输出:输出相应的消息。注意输出末尾没有换行符。
样例输入:
72 101 108 108 111 44
32 119 111 114 108 100 33
样例输出:
Hello, world!
解决问题前我们需要知道题目中EOF的意思:
当我们在打比赛时会经常看到while(scanf("%d",&n)!=EOF)这样的代码,其实EOF并没有什么特殊,他只是装在<stdio.h>这个头文件里的一个宏定义而已,也就是#define EOF (-1),没错就是这么简单,也就是EOF其实就是数字 -1
1.当我们循环用scanf()正常输入时,按下Enter一瞬间它就会会返回一个值,这个值等于成功接受对象的个数,scanf("%d",&a)=1; scanf("%d%d",&a,&b)=2;
2.那么此循环是否可以用键盘来直接控制停止输入呢?
答案是可以的,在Windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再按Enter 键,即可结束输入。在Linux下,输入完毕后按Ctrl+D键即可结束输入。
C语言代码如下:
#include<stdio.h>
int main()
{
int a[100],i=0;
while((scanf("%d",&a[i]))!=EOF)
{
i++;
}
for(int j=0;j<i;j++)
printf("%c",a[j]);
return 0;
}
输入完毕后,按Enter键,再按Ctrl+z键,再按Enter键,结束输入,程序执行
题目陷阱:输入数据之间可能夹杂回车,导致输出格式不对,导致零分