Hello, world!(蓝桥杯题目EOF)

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键,结束输入,程序执行

题目陷阱:输入数据之间可能夹杂回车,导致输出格式不对,导致零分

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值