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

为何C语言代码中printf未输出scanf读取的正确值?如何解决?

输入9却输出1?你踩了scanf返回值的坑

嘿,这个问题太常见了——你把scanf的返回值和它读取到的内容搞混啦!

咱们拆解一下你的代码问题:

  • scanf("%d", &n) 的真正作用是:从输入里读一个整数,然后把这个数存到变量n的内存地址里(这就是为什么要用&n)。
  • 但scanf的返回值不是这个整数本身,而是它成功读取并匹配的变量个数。你这里只写了一个%d格式符,所以当你输入有效的整数(比如9)时,它成功匹配了1个变量,就返回1;如果输入的是字母这种无效内容,会返回0;要是遇到输入结束(比如Ctrl+D),会返回EOF。

而你的代码里写了n = scanf("%d",&n);——这直接把scanf返回的1赋值给了n,最后printf输出的自然就是1,而不是你输入的9了。

怎么修复?

很简单,去掉赋值操作,直接调用scanf就行:

#include <stdio.h>

int main() {
    int n;
    printf("enter value: ");
    // 只需要让scanf把值存到n里,不用把返回值给n
    scanf("%d", &n);
    printf("%d", n);
    return 0;
}

进阶小提示(避免后续踩坑)

其实建议你养成检查scanf返回值的习惯,这样能处理输入错误的情况,比如用户输入了字母而不是整数:

#include <stdio.h>

int main() {
    int n;
    printf("enter value: ");
    // 检查是否成功读取了1个整数
    if (scanf("%d", &n) != 1) {
        printf("哎呀,输入无效,请输入一个整数!\n");
        return 1; // 非0返回值表示程序异常退出
    }
    printf("你输入的值是:%d\n", n);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:38:11