Почему мой код не работает - я не понимаю! Я прочитал другой вопрос, что это «дубликат» и понимание ситуации с «scanf». Но в этой ситуации я предоставил оператор switch в случае, когда переменной будет пустое пространство, в котором он просто выйдет из цикла. Это не вызовет проблем, поскольку цикл будет продолжаться до тех пор, пока пользователь ничего не вводит - он будет просто проходить цикл 2 раза (один для ввода пользователя, 1 для пробелов).Оператор switch не работает, где переменная ' n', например enter?
#include <stdio.h>
int main(void) {
setbuf(stdout, 0);
int op = 0;
do{
int num1;
int num2;
printf("\n\nMenu of operations\n1. + \n2. - \n3. * \n4./\n5. %%");
printf("\nEnter operation number to be executed: ");
op = getchar();
printf ("\nEnter first integer: ");
scanf ("%d", &num1);
printf ("Enter second integer: ");
scanf ("%d", &num2);
switch (op){
case '1':
printf ("\n%d + %d = %d", num1, num2, num1 + num2);
break;
case '2':
printf ("\n%d - %d = %d", num1, num2, num1 - num2);
break;
case '3':
printf ("\n%d * %d = %d", num1, num2, num1 * num2);
break;
case '4':
printf ("\n%d/%d = %f", num1, num2, (float)num1/num2);
break;
case '5':
printf ("\n%d %% %d = %d", num1, num2, num1%num2);
break;
case '\n':
case '\t':
case ' ' :
break;
default:
printf ("An invalid menu option");
break;
}
}while (op!=0);
return 0;
}
И результаты так:
Menu of operations
1. +
2. -
3. *
4./
5. %
Enter operation number to be executed: 4 //first time around- works fine
Enter first integer: 28
Enter second integer: 5
28/5 = 5.600000
Menu of operations
1. +
2. -
3. *
4./
5. %
Menu of operations
1. +
2. -
3. *
4./
5. %
Enter operation number to be executed:
Enter first integer: 4 //so one cannot type after the statement "Enter operation number to be executed:"
Я понимаю, что есть еще «\ п» символ в моем буфере из-за ввода, который получает присваивается переменной оп в GetChar () заявление. Но если это так, то оператор switch должен позаботиться об этом. Чтобы быть конкретным, он должен перейти к случаю, когда переменная op равна '\ n' или, альтернативно, '\ t', '', которую я написал в моем коде.
case '\n':
case '\t':
case ' ' :
break;
Так учил нас наш лектор, но почему это не будет работать в этом случае?
я нашел еще одну ошибку я получил, что могло бы помочь найти источник этой проблемы ...
Когда я продолжаю со вторым временем ввода num1 и num2 (где первая проблема лежит в не позволяя мне для ввода переменной оп), программа дает следующее:
Enter operation number to be executed:
Enter first integer: 2 Enter second integer: 4
Вы можете спросить, почему это вторая проблема, но в моем коде, я сказал, что если оп было что-то еще, кроме 1,2,3 , 4,5, \ n, \ t, '', он должен запустить то, что находится по умолчанию, и напечатать «Недопустимый параметр меню».
Однако, это не делает ничего из этого. Кто-нибудь имеет представление о том, что происходит?
Кроме того, я пытался делать то, что кто-то предложил в comment- поэтому я отредактировал мой код так:
while (getchar() != '\n')
{
op = getchar();
}
Однако, это еще не решает проблему ... Я получаю тот же самый результат. Поскольку newline/enter здесь не проблема, кто-нибудь знает, что такое?
Это не так, и это меня раздражало, что кто-то сказал, что это дубликат, потому что теперь я не могу получить ответы. Thankyou «very much»:/ – breakstorm