C语言中校验输入为整数且输入耗尽时以0状态退出的实现方法
解决方案
你的现有代码存在两个核心问题:
scanf第二个参数需要传入变量地址,你写的scanf("%d", x)是错误用法,会触发未定义行为,要改成scanf("%d", &x)。- 没有处理
scanf返回EOF的分支,这个返回值就对应输入流耗尽的场景。
scanf 的返回值一共分三种情况,刚好可以覆盖你的两个需求:
- 返回正整数:成功匹配并赋值的变量数量,你这里读单个整数,成功时返回1
- 返回0:输入内容和
%d格式不匹配,也就是非整数输入 - 返回EOF:输入流已经读完,没有更多内容可以读取
完整实现代码
#include <stdio.h> int main() { int x; int scan_ret; // 循环读取直到输入流耗尽 while ((scan_ret = scanf("%d", &x)) != EOF) { if (scan_ret == 0) { fprintf(stderr, "Non integer value input.\n"); // 非整数输入报错后退出程序,如果需要继续读后续输入可替换为下方的清缓冲区逻辑 return 1; } // 此处添加你对合法整数x的处理逻辑 printf("读取到合法整数:%d\n", x); } // 输入流耗尽,正常结束程序 return 0; }
如果你遇到非整数后不想直接退出,而是跳过错误内容继续读后续输入,可以把报错后的return逻辑替换为清空输入缓冲区的代码,把当前行的无效字符全部读完,避免下次循环重复读到同一个错误内容:
// 清空当前行剩余的无效输入 int c; while ((c = getchar()) != '\n' && c != EOF);
内容的提问来源于stack exchange,提问作者random math student
相关产品推荐
相关产品推荐

