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

Visual Studio运行含scanf的C程序出现多类报错问题求解

问题原因及修复方案

各报错/警告逐一说明

1. Return value ignored: 'scanf'

原因:scanf 函数的返回值代表成功读取并赋值的变量数量,Visual Studio的静态检查会提示你未处理该返回值——如果用户输入非法内容(比如输入字母而非数字),scanf 会返回0或EOF,未处理的话后续逻辑会用到异常值引发错误。
修复方案:

  • 方案1(推荐):增加返回值判断,处理输入失败的情况
  • 方案2(仅用于简单测试程序):将返回值强转为 void 消除警告,示例:(void)scanf("%lf", &NET_Income);

2. Warning C4477 'scanf' : format string '%f' requires an argument of type 'float *', but variadic argument 1 has type 'double *'

原因:scanf 的格式符规则中,%f 仅对应 float* 类型的指针参数,你定义的 NET_Income 是 double 类型,对应的指针参数需要用 %lf 格式符匹配。
修复方案:将所有 scanf 语句中的 "%f" 修改为 "%lf"。

3. Warning C4013 'OR' undefined; assuming extern returning int

原因:C语言的逻辑或运算符是双竖线 ||,不存在大写的 OR 关键字,编译器会把 OR 识别为未定义的函数名,因此抛出该警告。同时你原有代码还存在两处额外语法错误:

  • while 的判断条件没有完全包裹在括号内,两个判断条件需要放在同一对小括号里
  • while 条件末尾多写了分号,会导致循环体为空,后续大括号内的代码不会被循环执行
    修复方案:
  • 将 OR 替换为 ||
  • 把两个判断条件都放到 while 后的小括号内
  • 删除 while 条件末尾的分号

修复后完整代码

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
int main() {
    double NET_Income = 9999.58;
    printf("Enter your NET monthly income: ");
    // 合并输入判断逻辑,同时处理输入非法和数值范围错误
    while (scanf("%lf", &NET_Income) != 1 || NET_Income < 500.00 || NET_Income > 400000.00) {
        // 清空输入缓冲区,避免非法输入残留导致死循环
        while(getchar() != '\n');
        printf("Sorry, that is an incorrect amount, please re-enter your NET monthly income: ");
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:21:02