如何不使用switch为C代码添加非数字等非法输入的校验功能
输入校验修改方案
我们直接利用scanf()函数的返回值做校验,无需使用switch语句:scanf()的返回值代表成功匹配并赋值给变量的个数,当输入为字母等非数字内容时,%f格式符匹配失败,返回值为0,以此作为非法输入的判断依据即可。
原代码中printf语句存在传参冗余问题,格式化字符串中没有对应%f占位符却传入了变量k,修改时会同步修复。
修改后完整代码如下:
#include <stdio.h> int main() { float k; int read_res; // 存储scanf的返回值 printf("Give a number: "); read_res = scanf("%f", &k); // 非法输入判断:返回值不等于1说明没有成功读取到浮点型数字 if (read_res != 1) { printf("输入错误:请输入有效的数字,不要输入字母等非数字内容\n"); // 清空输入缓冲区残留的非法字符,避免缓冲区残留影响后续逻辑 while (getchar() != '\n'); return 1; // 异常退出 } if (k > 0) printf("%.2f is positive\n", k); else if (k < 0) printf("%.2f is negative\n", k); else printf("%.2f is null\n",k); return 0; }
补充说明:
- 代码将原有三个独立if改为else if结构,避免无效重复判断,不会改变原有判断逻辑
- 非法输入场景下增加了缓冲区清空逻辑,防止残留的非法字符干扰后续可能的输入操作
内容的提问来源于stack exchange,提问作者Vladyslav
相关产品推荐
相关产品推荐

