c - 开关盒中的整数输入和用户输入字符串

标签 c switch-statement

我正在为我的 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 是否返回了 0EOF 并分别处理这种情况 - 例如更具描述性的错误消息。

关于c - 开关盒中的整数输入和用户输入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45521731/

相关文章:

编译 : [Error] array type has incomplete element type

c - 链接列表创建 - 垃圾输出?

c - 用C广播UDP

c# - 缩短简单的 C# 代码

c++ - 通用 makefile 显示没有规则生成目标错误

我可以在声明后初始化字符串吗?

java - 在没有大量 if else 的情况下将 VBA 条件 Switch 转换为 Java

java - 带字符串 Java 的 Switch Case

iphone - UIButton 作为开关

java - 在 Android 中以字符串作为参数的 Switch 语句