我正在为我的 switch case 编写代码。我正在接受用户的输入并根据输入打印相应的日期。但我的问题是,如果用户输入字符串,它会将 case 0 语句打印为输出。任何人都可以纠正这个程序吗?
#include<stdio.h>
int main(void){
int days;
scanf("%d",&days);
switch(days){
case 0: printf("Mon");break;
case 1: printf("Tue");break;
case 2: printf("Wed");break;
case 3: printf("Thu");break;
case 4: printf("Fri");break;
case 5: printf("Sat");break;
case 6: printf("Sun");break;
default: printf("Plz enter a valid day(0-6) :( ");
}
return 0;
}
我的输出打印是:
>>a.out
Naveen
mon
最佳答案
如果在输入中找不到格式说明符,
scanf
将不会修改您的 int
。
在这种情况下,您正在switch
未初始化的int
上。对未初始化的 POD 类型做任何通常是 A Bad Thing™ , 所以你应该注意你的值被正确初始化。
在这种情况下,由于您希望它触发 default
分支,因此初始化为 int days = -1;
(或任何不在 [0 ,6]
) 应该可以解决问题。
PS:请注意,scanf
还会返回一个 int
,告诉您它成功找到了多少个参数。这意味着您可以检查 scanf
是否返回了 0
或 EOF
并分别处理这种情况 - 例如更具描述性的错误消息。
关于c - 开关盒中的整数输入和用户输入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45521731/