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

如何不使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:36:03