Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 开关/机箱问题_C - Fatal编程技术网

C 开关/机箱问题

C 开关/机箱问题,c,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':

对于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;
}
#包括
#包括
int main()
{
字符名;
printf(“输入字符:”);
扫描单位(“%c”和名称);
交换机(名称)
{
案例“a”:
printf(“元音”);
打破
案例“e”:
printf(“元音”);
打破
案例“i”:
printf(“元音”);
打破
案例“o”:
printf(“元音”);
打破
案例“u”:
printf(“元音”);
打破
案例“y”:
printf(“有时”);
打破
违约:
printf(“辅音”);
}
返回0;
}

请注意,的Microsoft页面上显示:

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

char c;

scanf_s("%c", &c, 1);
您的
scanf_s()
调用失败,但您没有检查结果,因此您不知道这一点

始终检查输入函数的结果

并确保您已经阅读了手册页中所使用的功能

使用
“%c”
作为跳过空白的格式字符串可能也是一个好主意。不过,这是以后的改进


您没有
中断
默认值:
案例标签中的代码之后。那不是个好主意

您可以使用:

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");

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

您输入的是大写字符吗?您尝试过调试器吗?cmd中的输出会询问一个问题“输入字符:”。因此,当输入任何字符时,下一行将打印“辅音”。如果我从代码中删除默认部分,那么在输入字符后将不会打印输出。当然,第一步是打印
name
的值,这样您就可以看到您正在玩什么了?它实际上工作正常,显示您正在输入的内容。您没有包括引号(例如,
'a'
)是吗?嗯。。。最后没有违约造成的损失,还有其他原因让我错过吗?(只是好奇,不是批评)谢谢你,乔纳森!这很有帮助,是扫描线内的1。另外,还感谢您提供关于将案例a、e、i、o、u后跟printf(“元音\n”)的额外建议。也添加了break.1,在扫描行中,所有粗体和斜体字的内容以及关于良好实践的解释都被忽略了!smh