Не работает цикл while с переключателем на языке C - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь сделать этот цикл в C, где вы нажимаете ввод и входите в него, и вы либо нажимаете 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 голосов
/ 31 мая 2018

Как уже отмечали другие, вы читаете в целое число с помощью 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 при ошибке).

...