关于while(1==scanf("%d",&a)!=EOF)

如果代码输入中去掉1==,oj可以通过,而加上则会出现超时的问题,不太明白为什么.只了解scanf的返回值是一个成功输入参数的个数。想知道为什么多出一个1==的判断就会在oj出现超时的情况

c

6个回答

 1==scanf("%d",&a)!=EOF
这种写法属于编译器未定义,==和!=优先级相同
1==scanf("%d",&a)是表达式的第一部分,如果scanf("%d",&a)返回EOF,则未见得false==EOF,这要看flase和 EOF 各自在编译系统中怎么定义的。
建议不要玩弄这种小技巧,还是老实分开写。

我用VC编译了一下,这个无论有没有1==都可以通过编译,而且结果都是一样的,无论输入什么的后果的是执行while,..............

while (scanf("%d", &i) != EOF)
意思是输入不是EOF的时候继续循环输入,否则结束输入循环。
在windows DOS下 EOF相当于:按下回车,再输入ctrl+z。就会输入结束
Linux下 EOF相当于Ctrl+D......
答案就在这里:while (scanf("%d", &i) != EOF)
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

平凡一点:
int a;
do{
scanf("%d", &a);
//....
}while(a!=-1);

会先判断1==scanf("%d",&a) 成立 为1 1!= EOF

==!=优先级相同,结合性从左到右。首先计算1==scanf("%d",&a),可能不同编译器会返回不同的结果,
这里假定表达式为真返回1,表达式为假返回0。
而EOF一般在大多数编译器中都被定义为-1,所以语句1==scanf("%d",&a)!=EOF永远为真,程序陷入死循环。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问