while(scanf("%d",&n[i])!=1)解释一下这里!=1和==1的区别以下源码:#include <stdio.h>int main(void) { int n[8]; printf("Enter the integer:\n"); for(size_t i=0;i<8;i++) while(scanf("%d",&n[i])!=1){ printf("continu\n"); } for(size_t i=8;i>=1;i--) printf("%d",n[i-1]); getchar(); getchar(); return 0;}
2 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
“==1 的话不是读取成功一个值继续吗”——那么你的意图是“继续”什么呢?
scanf 返回 1 确实表示成功读取这个值。== 1 的判断结果为 true,这会进入执行 while 循环体,可这个循环体只是打印出一句话,然后又继续执行 while 判断部分的 scanf——你还是在这个 while 循环中没出去! 所以如果你输入正确,那你根本没法“继续”,而是被困在了 while 循环中。
而且,你这样判断“读取成功”的行为没有意义啊! 如果成功读取那就执行后面的语句呗,为何要判断呢??
如果是判断“读取失败”的话还有点用。如果读取失败,就提示你再次输入正确的值。这一般可以用循环来处理,比如 while (scanf读取,判断是否失败) {读取失败,提示你再次输入}。
但是代码中 while(scanf("%d",&n[i])!=1) {printf("continu\n");} 这个方法并不能达到目的!
如果 scanf 匹配“输入流”中的内容失败,那么输入流中错误的内容还会留在输入流中!
那么一旦 scanf 匹配失败,scanf 返回 0,则满足 while 循环条件,while 的循环体打印出一句"continu"后开始下一次循环,即再次执行 while 的判断部分。由于输入流中的错误内容还在,scanf 仍然会读到这些错误内容,仍然会匹配失败......这会导致 while 死循环!
- 2 回答
- 0 关注
- 2263 浏览
添加回答
举报
0/150
提交
取消