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; }
问题原因
输入格式不匹配:
scanf的格式串是%s,%d,它要求输入必须是**"月份,天数"**的格式(比如December,22),但实际输入的是空格分隔的December 22。这会导致scanf读取完December后,找不到预期的逗号,直接放弃读取day变量。此时day是未初始化的局部变量,其值是内存中的随机垃圾值,刚好显示为1。数组缓冲区溢出:
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
相关产品推荐
相关产品推荐

