关于while(scanf_s("%d",&x)!=0) 的逻辑错误 (scanf_s的 返回值)

背景:1.要求输入多组数据,然后输出什么东西,当第一个数输入的是0是,程序停止。
2.前几天学过 while(scanf_s("%d",&x)!=EOF) ctrl+z时停止 所以我想可以把EOF换成0,这样输
入0是就可以停止,但是事实证明我错了。

知识储备:scanf_s的返回值
scanf("%d %d",&a,&b);
函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;
如果只有a被成功读入,返回值为1;
如果a和b都未被成功读入,返回值为0;
如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。

错误:当我输入0时,我成功的读入了一个数,则scanf_s成功的返回了1,此时1!=EOF成立 注意EOF通常为-1,ctrl+z,此时while成立,执行while里面的程序,所以逻辑错误。

解决:while (scanf_s("%d",&x))
{
x==0;
break;
............
}
return 0;
这样就可以成功解决问题,而且是在0时结束程序

猜你喜欢

转载自www.cnblogs.com/panghushalu/p/11786065.html