C语言如何获取while循环条件中scanf函数的返回值
解决方法
你可以直接将scanf的返回值赋值操作嵌入while循环的判断条件中,C语言中赋值表达式本身会返回被赋值的数值,不会影响循环的终止判断逻辑,具体实现如下:
- 首先在循环外定义一个整型变量存储
scanf的返回值 - 将
scanf调用改为赋值表达式包在while的判断条件里,同时保留原有的EOF判断 - 在循环体内首先判断返回值是否等于2,确认成功读取到两个整数再执行后续逻辑
- 如果出现读取失败的情况,需要先清空输入缓冲区的残留非法内容,避免程序进入无限循环
修正后的完整代码示例:
#include <stdio.h> int main (void){ int order, system; int read_cnt; // 同时判断是否到输入末尾、存储读取成功的元素个数 while( (read_cnt = scanf("%d %d", &order, &system)) != EOF ){ // 先校验是否成功读取到2个整数 if(read_cnt != 2){ printf("Invalid input! Please enter two integers.\n"); // 清空输入缓冲区残留的非法字符 while(getchar() != '\n'); continue; // 跳过后续逻辑,直接等待下一轮输入 } // 再校验数值合法性 if(order < 0 || system < 2 || system > 36){ printf("Invalid input! Order must be non-negative, system must be between 2 and 36.\n"); // 不需要直接退出程序就不要写return 1,改为continue等待下一轮输入 while(getchar() != '\n'); continue; } // Do something with the numbers } return 0; }
如果你遇到非法输入时需要直接终止程序,才需要在错误分支写
return 1,如果需要保持程序运行等待新输入,使用continue跳过当前轮次即可。
内容的提问来源于stack exchange,提问作者user13343210
相关产品推荐
相关产品推荐

