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

如何判断输入是否为字符串?C语言输入校验问题求助

解决方案

要解决输入非数字时终止程序的问题,核心是利用scanf的返回值判断输入有效性,同时处理输入缓冲区的残留数据,具体实现如下:

关键要点

  • scanf("%d", &var)的返回值为成功读取的整数个数:如果输入是字符串/字符,返回值为0,此时可触发终止逻辑。
  • 输入无效时必须清空缓冲区,否则残留的垃圾数据会导致后续scanf无限循环读取错误内容。
  • 原代码中scanf("%d/n")的格式串错误,应去掉多余的/n,scanf会自动忽略输入中的换行符。

修改后的代码

#include <stdio.h>
#include <stdlib.h>  // 用于exit()函数

int r = 0;  // 假设r是全局变量,原代码中使用了该变量

void check()                                           
{                                                    
    int w = 0, k = 0;
    int scan_result;  // 存储scanf的返回值

    printf("Liczba ruchow: %d\n", r++); 
    printf("Wybierz wiersz : ");
    scan_result = scanf("%d", &w);
    
    // 检查是否读取到有效整数,或输入是否超出范围
    while (scan_result != 1 || w < 0 || w > 9)
    {
        if (scan_result != 1) {
            // 输入非数字,终止程序
            printf("输入无效,程序终止\n");
            // 清空缓冲区残留内容
            while (getchar() != '\n');
            exit(1);
        }
        // 输入数字但超出范围,提示重新输入
        printf("Bledna wartosc prosze wpisac raz jeszcze :");
        scan_result = scanf("%d", &w);
    }

    printf("Wybierz kolumne : ");
    scan_result = scanf("%d", &k);
    
    while (scan_result != 1 || k < 0 || k > 9)
    {
        if (scan_result != 1) {
            printf("输入无效,程序终止\n");
            while (getchar() != '\n');
            exit(1);
        }
        printf("Bledna wartosc prosze wpisac raz jeszcze :");
        scan_result = scanf("%d", &k);
    }
}

补充说明

  • 当用户输入非数字内容时,scanf无法读取有效整数,返回值为0,此时触发exit(1)终止程序。
  • 加入while (getchar() != '\n')是为了清空输入缓冲区中残留的无效字符,避免这些字符干扰后续的输入操作(如果程序还有其他输入逻辑的话)。

内容的提问来源于stack exchange,提问作者user331990

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:55:24