C/C++输入那点小事

“测试输入包含若干测试实例。当N为0时,输入结束,该实例不被处理。”这句话是最早我对ACM的印象,以前也没见过这种输入要求,做第一道题的时候就卡住了,上网看别人的代码 都有一句:

while(scanf("%d",&n)!=EOF);

"scanf 函数还能放while里啊... EOF是什么..."。上网找答案吧 也没人可问...有人说EOF等于-1,其实就是scanf函数的返回值,不等于-1时,继续进行循环;有人说 EOF是处理到文件结束 不用EOF也可以....很多天后终于把这个弄明白了scanf的返回值由后面的参数决定:

scanf("%d%d", &a, &b);

如果a和b都被成功读入,那么scanf的返回值就是2;如果只有a被成功读入,返回值为1;如果a和b都未被成功读入,返回值为0;如果遇到错误或遇到end of file,返回值为EOF。且返回值为int型。验证:

sign=scanf("%d %d",&a,&b); 
printf("%d %d\n",a,b); 
printf("%d\n",sign);

但是输入“a X”的时候 输出的sign为0,什么时候输出EOF? 在stdio.h中 宏定义为-1。按照说明,scanf函数只有在第一个参数为NULL(空指针)的情况下,才可能返回EOF,否则,返回成功格式化并赋值的参数个数(>=0)。End Of File,在电脑的术语缩写通常为 EOF,在作业系统决定资料源无更多的资料可读取。

当时这个程序就是这么写的:

while(scanf("%d",&n)!=EOF)
{
     if(n==0)
     {
          break;
     }
}

终于把那道题给AC了...后来看别人的代码,又这么写了:

while(scanf("%d",&n)&&n!=0);

后来:

whlie(scanf("%d",&n)&&n);

再后来:

while(scanf("%d",&n),n);

...

也许用C语言,用scanf函数,这么写是最简单的吧...

同样,C++中输入更简单cin>>a;即可搞定,三种写法(原理同上):

while(cin>>a&&a!=0);
while(cin>>a&&a);
while(cin>>a,a);

欧拉...
原文链接: https://www.cnblogs.com/sooner/archive/2012/04/17/2454496.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/47668

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午11:40
下一篇 2023年2月8日 下午11:40

相关推荐