Моя проблема в том, что когда я вводил более 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;
}
Я отредактировал это как мой исходный код, который привел меня к той же проблеме
В 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
}
Вышеуказанный метод можно использовать с простотой.
Вы читаете персонажа так, 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;
}
}
Причина этого поведения заключается в том, что вы объявили массив символов [2], и вы используете только один из его элементов (сначала). Поэтому, когда вы вводите 145, он принимает только 1, и поэтому он переходит к первой функции.
c
), а затем просто используете только один из его элементов? Во-вторых, использованиеgoto
не рекомендуется часто.