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

C语言整数输出异常:输入日期后天数始终显示为1

C语言日期输入回显异常问题

问题场景

编写了一段C语言代码用于读取月份和日期并回显,但输入December 22时,输出始终显示天数为1,无法正常更新。代码如下:

int main(void){
    char month[] = {};
    int day;
    printf("Please enter the month and day of you date. i.e January 01\n\n");
    scanf("%s,%d", month, &day);
    printf("Month is %s and the day is %d\n", month, day);
    return 0;
} 

问题原因

  1. 输入格式不匹配:
    scanf的格式串是%s,%d,它要求输入必须是**"月份,天数"**的格式(比如December,22),但实际输入的是空格分隔的December 22。这会导致scanf读取完December后,找不到预期的逗号,直接放弃读取day变量。此时day是未初始化的局部变量,其值是内存中的随机垃圾值,刚好显示为1。

  2. 数组缓冲区溢出:
    char month[] = {};定义了一个长度为0的字符数组,没有任何存储空间来存储输入的月份字符串。当scanf尝试把December写入这个数组时,会直接越界写入到其他内存区域,属于未定义行为,可能会破坏其他变量的值,甚至导致程序崩溃。

修复方案

  • 给month数组分配足够的存储空间,比如char month[20];(足够容纳最长的英文月份名称加上字符串结束符)。
  • 修改scanf的格式串以匹配输入习惯,把%s,%d改成%s %d,这样就能正确读取空格分隔的月份和日期。
  • 建议增加scanf的返回值检查,确保输入格式正确:
    if(scanf("%s %d", month, &day) != 2) {
        printf("输入格式错误,请按照 月份 日期 的格式输入\n");
        return 1;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:10:34