读c primer plus遇到的问题

img


为什么choice=3时,不是打印第三条和第四条;
在choice=4时,不是只打印第四条。

看case后面的break 如果没有,z则继续执行下一条语句,如果有break,则跳出switch

你认为的第三条是case 3;第四条是case::4

实际:
case 1 没有消息
第一条是case 2
第二条是case 3
第三条是case 4

【以下回答由 GPT 生成】

这个问题是由于C语言中的switch语句的特性导致的。

在上述代码中,当choice=3时,会按顺序执行case 3case 4之后的所有代码。这是因为case 3的代码块没有break语句来终止switch语句,所以会继续执行下一个case的代码块。这意味着在这种情况下,会打印"Quiteright!"和"Goodshow!"两条消息。

而当choice=4时,只会打印第三条消息"Goodshow!",这是因为case 4的代码块没有被执行。由于在case 3的代码块中没有break语句,会导致程序继续执行下面的代码,即case 4的代码块。所以在这种情况下,只会打印"Goodshow!"。

要解决这个问题,你可以在case 3的代码块末尾添加break语句,这样就可以终止switch语句,避免执行后续的代码块:

switch(choice) {
    case 1:
    case 2:
        printf("Darntootin'!\n");
        break;
    case 3:
        printf("Quiteright!\n");
        break;
    case 4:
        printf("Goodshow!\n");
        break;
    default:
        printf("Have anice day.\n");
}

这样修改后,当choice=3时,只会打印"Quiteright!",而不会执行后续的代码块;当choice=4时,只会打印"Goodshow!",不会执行default代码块。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^