You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中校验输入为整数且输入耗尽时以0状态退出的实现方法

解决方案

你的现有代码存在两个核心问题:

  1. scanf 第二个参数需要传入变量地址,你写的 scanf("%d", x) 是错误用法,会触发未定义行为,要改成 scanf("%d", &x)。
  2. 没有处理 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:51:02