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

为什么scanf()输入的变量无法输出存储值反而打印内存地址?

问题原因

scanf()的格式字符串中,除了%d这类格式占位符之外的所有普通字符,都要求用户在输入时完全逐字符匹配输入,否则会直接匹配失败、终止读取。
你代码里把提示文本enter the value:直接写在了scanf()的格式串中,程序运行时不会主动输出这段提示,反而会等待用户先手动输入完全一致的enter the value:前缀,再输入整数才能完成正确赋值。
如果运行时直接输入数字,scanf()匹配不到要求的前缀字符,读取操作直接失败,此时valueEntered是未初始化的局部int变量,存储的是栈内存里的随机脏值,输出时就会显示无意义的随机数,看起来和内存地址类似。

修复方法
  • 输入提示文本不要放在scanf()格式串内,单独用printf()打印输出
  • 建议校验scanf()的返回值,确认整数读取成功后再使用对应变量,避免读取未初始化的内存脏值

修复后的可正常运行代码如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int valueEntered, x;
   
    printf("enter the value:");
    // 校验scanf返回值,成功读取1个整数时才继续逻辑
    if (scanf("%d", &valueEntered) != 1) {
        printf("输入错误,请输入合法整数\n");
        return EXIT_FAILURE;
    }

    x = valueEntered;
    printf("the value entered is:%d\n", x);

    return EXIT_SUCCESS;
}

运行程序后会先主动打印输入提示,直接输入整数即可正常读取赋值,不会再出现输出随机值的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:27:17