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

C语言中scanf读取非整型输入后输出异常值的原因是什么?

异常输出原因分析

你给出的C程序代码如下:

#include <stdio.h>

int main()
{
    int var, rar;

    scanf("%d %d", &var, &rar);
    printf("%d %d", var, rar);
}

出现异常输出的核心原因有以下两点:

  • scanf 匹配失败未完成变量赋值
    调用scanf时指定的格式串为%d %d,要求输入两个合法的十进制整数,但实际输入的bn nb均为字符型内容,完全不匹配%d的格式要求,此时scanf会直接终止匹配,返回成功赋值的参数个数0,不会对var、rar两个变量做任何赋值操作。
  • 未初始化局部变量值为随机垃圾值
    代码中定义的var、rar都是函数内的局部自动变量,没有手动初始化,存储在栈内存中,在未被赋值的情况下,其值是栈空间之前残留的无意义随机数据,你输出的-81319504 32767就是这两个变量对应内存地址里的原始随机值。

如果要避免这类问题,可以在定义变量时就初始化默认值,或者判断scanf的返回值是否等于预期的输入项个数,再做后续逻辑处理,优化示例如下:

#include <stdio.h>

int main()
{
    // 初始化默认值
    int var = 0, rar = 0;
    // 判断scanf是否成功读取了2个整数
    if (scanf("%d %d", &var, &rar) != 2) {
        printf("输入格式错误,请输入两个整数\n");
        return 1;
    }
    printf("%d %d", var, rar);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:24:02