使用C语言的switch case进行while循环不起作用

时间:2018-05-31 15:45:15

标签: c loops while-loop switch-statement case

我试图在C中执行此循环,您可以按Enter键并在其中,然后按0退出或3继续进行循环。但不知何故,Switch命令没有被激活。请注意,每个消息都有不同的消息,可以将它们与其他结果区分开来。有人可以帮我理解这段代码的问题吗?注意:代码显然在int main()中。

int I = 1;
printf("Press enter to start the loop...");
getchar();
do
{
    printf("\nYou are in a LOOP. Would you like to stay in it, or leave it? \nPress 0 to leave the loop or press 3 to stay in it: ");
    scanf_s("%d", &I);
    getchar();

    switch (I)
    {
    case'3':
        printf("\nYou are STILL inside the LOOP. Press 0 to leave it or press 3 to stay in it: ");
        getchar();
        break;
    case'0':
        printf("\nExiting the LOOP...");
        break;
    default:
        printf("\nPlease, enter a valid command...: ");
        if (scanf_s("%d", &I) != 3 || scanf_s("%d", &I) != 0);
        {
            fflush(stdin);
        }
        break;
    }

while (I != 0);
printf("\nCongratulations! You are OUT of the LOOP!");

1 个答案:

答案 0 :(得分:0)

正如其他人所指出的那样,您正在使用scanf_s()读取整数,但要与switch语句中的字符文字进行比较。
switch'3':应写为switch 3:(使用整数文字)。同样适用于0案例。

此外,您的示例在}之前缺少大括号while(I != 0);

值得一提的是,scanf_s()"返回成功转换并分配的字段数" (来自https://msdn.microsoft.com/en-us/library/w40768et.aspx)。也就是说,默认开关情况下的scanf_s()调用只会在读取单个整数时返回0或1(或出错时为EOF)。