切换/案例问题

时间:2017-06-28 03:51:16

标签: c

对于C语言,我知道我关闭了,但是对于输入的任何字符,打印输出是"辅音"。我的switch case语句有什么问题。我需要if个陈述吗?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char name;
    printf("Enter a character: ");
    scanf_s("%c", &name);

    switch (name)
    {
    case 'a':
        printf("Vowel");
        break;
    case 'e':
        printf("Vowel");
        break;
    case 'i':
        printf("Vowel");
        break;
    case 'o':
        printf("Vowel");
        break;
    case'u':
        printf("Vowel");
        break;
    case 'y':
        printf("Sometimes");
        break;
    default:
        printf("Consonant");
    }
    return 0;
}

1 个答案:

答案 0 :(得分:6)

请注意scanf_s()的Microsoft页面显示:

  

对于字符,可以按如下方式读取单个字符:

char c;

scanf_s("%c", &c, 1);

您的scanf_s()来电失败,但您没有查看结果,所以您不知道。

总是 检查输入功能的结果!

并确保您已阅读了您正在使用的功能的手册页。

使用" %c"作为跳过空格的格式字符串可能也是个好主意。但是,这是后来的改进。

break;案例标签中的代码后面没有default:。这不是一个好主意。

您可以使用:

if (scanf_s("%c", &name, 1) == 1)
{
    switch (name)
    {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
        printf("Vowel\n");
        break;
    case 'y':
        printf("Sometimes\n");
        break;
    default:
        printf("Consonant\n");
        break;
    }
}
else
    fprintf(stderr, "Failed to read a character\n");

请注意,所有大写字母,标点符号,空格和控制字符都被视为辅音。这并不完全准确。