能否在if语句中使用scanf函数?C语言代码问题咨询
问题分析与解决方法
原代码的核心错误是混淆了scanf的返回值与输入的数值:
scanf("%d", &n)的返回值是成功读取的整数个数(正常读取时返回1,读取失败/到文件尾返回EOF),和输入的n的奇偶性完全无关。原代码中用scanf(...)%2 !=0判断,会导致只要成功读取一个数就直接退出循环,完全达不到“输入到奇数才停止”的目的。
修正后的代码(基础版)
把scanf放在if内时,需要先判断读取是否成功,再检查输入数值的奇偶性:
// take input from user until user enters odd number #include <stdio.h> int main(){ int n; do{ printf("Enter a number :"); // 先确认成功读取整数,再判断奇偶 if(scanf("%d", &n) == 1){ if(n % 2 != 0){ break; // 输入奇数,退出循环 } } else { // 读取失败(如输入非数字),直接退出 break; } }while(1); printf("End"); return 0; }
更健壮的版本(处理输入错误)
如果需要处理用户输入非数字的情况(避免死循环),可以加入缓冲区清理逻辑:
// take input from user until user enters odd number #include <stdio.h> int main(){ int n; int read_status; do{ printf("Enter a number :"); read_status = scanf("%d", &n); if(read_status == 1){ if(n % 2 != 0){ break; } } else if(read_status == EOF){ // 遇到文件结束符,退出循环 break; } else { // 输入无效,清理缓冲区的垃圾字符 printf("Invalid input! Please enter an integer.\n"); while(getchar() != '\n'); // 清空直到换行符 } }while(1); printf("End"); return 0; }
内容的提问来源于stack exchange,提问作者007Dhruv
相关产品推荐
相关产品推荐

