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

Posted panghushalu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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时结束程序

以上是关于关于while(scanf_s("%d",&x)!=0) 的逻辑错误 (scanf_s的 返回值)的主要内容,如果未能解决你的问题,请参考以下文章

3 while循环, 输入int 判断

关于while (~scanf("%d %d", &m, &n))的用法

关于scanf的用法

关于c语言循环与布尔运算的问题

aaaaaaaa

zzz