Как предотвратить переход моего ввода к другой функции при продолжении программы

0

Моя проблема в том, что когда я вводил более 1 числа или символов (например: 156), значение 56 напрямую переходит к моей следующей функции (f1, f2). Как я могу предотвратить это и распечатать, что является ошибкой? (ps: Я новичок, поэтому, если вы, ребята, можете мне помочь без использования iostream, было бы здорово

char c;
printf("menu");
printf("Please enter the option 1 - 4, press q to quit\n");
input_c:            
scanf("%c",&c);
do{         
switch (c)          
case '1': f1();
break;
case '2': f2();
break;
case 'q': quit();
break;
default: goto input_c;
break;
}

Я отредактировал это как мой исходный код, который привел меня к той же проблеме

  • 1
    Во-первых, почему вы объявляете массив размером 2 ( c ), а затем просто используете только один из его элементов? Во-вторых, использование goto не рекомендуется часто.
Теги:

3 ответа

1

В char c[2]; declare, c - массив из 2 символов, начиная от индекса 0 до 1. Поэтому, читая ввод в него, следует использовать scanf("%c", &c[i]).

Вы не можете использовать индекс массива как 2 в switch (c[2]) оператора switch (c[2]), так как индексирование массива начинается с 0 в C

main() {
char c; 
scanf("%c", &c);
switch(c) {
   case '1': f1(); break;
   case '2': f2(); break;
   case 'q': quit(); break;
   default: //blah
}

Вышеуказанный метод можно использовать с простотой.

  • 0
    это мой оригинальный код для написания моего меню, но так как он продолжает переходить к функции f1, я пытаюсь сделать это с массивом (что создает ту же проблему)
0

Вы читаете персонажа так, strlen на нем неверно и сделает неопределенное поведение. Во-вторых, размер вашего массива равен 2, поэтому вы можете индексировать его на 0 и 1. c[2] снова может вызвать неопределенное поведение.

Просто используйте простые переменные символы, а и заменить goto на while:

char c;

while(true)
{
    scanf("%c",&c); // cin >> c;

    switch (c)
    {
    case '1':
        f1();
        break;
    case '2':
        f2();
        break;
    case 'q':
        quit();
        break;
    }
}
  • 0
    Я сделал все 3 вещи выше, но проблема все еще остается.
0

Причина этого поведения заключается в том, что вы объявили массив символов [2], и вы используете только один из его элементов (сначала). Поэтому, когда вы вводите 145, он принимает только 1, и поэтому он переходит к первой функции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню