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

C语言入门代码输出32767类数值的原因及对应数值特性咨询

#include<stdio.h>
int main()
{
    int num;
    scanf("Enter a number %d",&num);
    printf("%d",num);
    
    return(0);
}
问题原因
  • scanf的第一个参数为格式匹配串,仅用于定义需要匹配的输入内容规则,不承担提示语输出功能。你代码中将提示语写入scanf的格式串,意味着要求用户必须完整输入和格式串完全一致的内容:先输入Enter a number ,再输入数字,scanf才会将输入的数字正确赋值给num变量。
  • 如果用户输入的内容和格式串不匹配,scanf会执行失败,不会给num赋值。而num是未初始化的栈区局部变量,默认值为栈内存的残留垃圾值,就是你观察到的32764、32766、32767这类固定数值。
  • 正确的写法为:先调用printf输出提示语,再调用scanf仅用格式占位符匹配输入内容,参考示例如下:
#include<stdio.h>
int main()
{
    int num;
    printf("Enter a number: ");
    scanf("%d",&num);
    printf("%d",num);
    return 0;
}
数值的特殊属性
  • 32767是16位有符号整型(int)的最大值,16位有符号int的取值范围为-32768 ~ 32767,当二进制位为16位且最高位符号位为0,剩余15位全为1时对应的十进制值就是32767。
  • 你看到的三个数值都接近这个最大值,说明你当前的编译环境中int类型占2字节(16位),栈内存未初始化的残留值恰好落在这个区间附近。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:00:06