c - scanf 输入输出混淆

标签 c while-loop scanf

我对 while 循环如何工作的假设感到困惑.. 我已经在我的电脑上试过了,看到所有情况都符合预期, 我是对的,还是我错过了什么?

 while(scanf("%d%d%d",&a,&b,&c) ,a||b||c ) { /* some code */ }

这意味着即使一个值(a、b 或 c)不为零,它也会继续循环


while(scanf("%d%d%d",&a,&b,&c) ,a&&b&&c ) {  /* some code */ }

这意味着只要 a、b 或 c 中的任何一个变为零,循环就会终止

最佳答案

这是正确的,第一个循环将继续进行,直到所有三个值都变为零,而第二个循环将在三个项目中的一个变为零时立即停止。

这是因为comma operator丢弃第一个表达式的结果 - 本质上,表达式 a || b || ca && b && c 成为您的循环条件。

请注意,当输入在读取停止组合(全零/一个零)之前结束时,您的循环可能不会终止。发生这种情况时,您的循环将变得无限。为防止这种情况发生,请将循环更改为

 while(scanf("%d%d%d",&a,&b,&c) == 3 && (a||b||c) ) { //some code }

 while(scanf("%d%d%d",&a,&b,&c) == 3 && a && b && c) ) { //some code }

关于c - scanf 输入输出混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37567045/

相关文章:

c++ - 从 txt 文件中读取并写入 C 中的结构

c - 如何检查小于整数变量的数字是否包含特定数字

c++ - 使用 -O3 编译时的不同评估

c - 如何在C中正确输入字符串

c++ - 为什么 GetLastError() (NOT GetReturnMessage) 在用户名错误时返回 “wrong password”?

c - 在 C 中预定义结构

java - WHILE 循环中的多个条件

c - 最好使用scanf或fgets?

C - 如何使用 sscanf <int><string><int> 进行读取?

c++ - 没有空格的宏