如何判断输入是否为字符串?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
相关产品推荐
相关产品推荐

