while循环中scanf的返回值

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;

}


慕用4063026
浏览 2264回答 2
2回答

onemoo

“==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 死循环!

慕用4063026

==1 的话不是读取成功一个值继续吗 ,可是==1的话代码就读不出倒序
打开App,查看更多内容
随时随地看视频慕课网APP