Вы должны использовать значение char
вместо int
, если хотите иметь возможность обрабатывать символы.
В этом случае вы также должны изменить свой оператор switch-case
, потому что '1'
- символ, отличный от 1
- целое число. Исправленный код должен быть что-то вроде:
#include <limits.h>
int main()
{
char ch;
do
{
printf("\n1.create\n2.display\n3.exit\n\t");
printf("Enter your choice:: ");
scanf("%c",&ch);
printf("choice = %c\n\n", ch);
switch(ch)
{
case '1':
printf("\n Case 1 executed\n");
break;
case '2':
printf("\nCase 2 executed\n");
break;
// case 32767: - can not be stored in a char variable
case 127:
case CHAR_MAX: // these two are almost equivalent, but the
// second one is better because it relies on
// library defined constant from limits.h
case '3':
printf("\nExit\n");
exit(0);
break;
case 'a':
printf("\nA character case accepted!\n");
break;
default:
printf("Wrong choice!!!");
break;
}
}while();
return 0;
}
Обратите внимание, что я также исключил состояние разрыва из как while()
аргумента, поскольку он является излишним - это уже будет проверено внутри switch
заявления.
Я также добавил случай без ошибок для разбора символа, чтобы вы могли увидеть пример этого.
Еще одно замечание: Ваш старый код должен принять как 01
и 1
как действительный выбор, в то время как новый код будет разбирать 01
как два различных варианта (1 выбор == 1 символ):
0
будет быть проанализирован как неправильный выбор
1
будет анализироваться в качестве правильного выбора для случая 1
Я также комментировал некоторые другие вещи из г наш код в комментариях кода в исправленных фрагментах кода. Я вытащил «невозможное», если (как указал Джерри Коффин в комментариях) и поставил его в более подходящее место, заменив константу на что-то значимое.
Run это через отладчик, а затем вернуться сюда, если вы не понимаете, что происходит. Если вы работаете в Linux, я бы рекомендовал GDB ... –
@Prabin Почему вы хотите ввести «ch» в виде целочисленного типа? Вам понадобится этот номер позже для дальнейшей обработки? Если нет, то использование 'int' для разбора не строго-целочисленного ввода может оказаться не лучшим решением. Если вам нужно значение для чего-то другого, кроме 'switch-case', будет ли вводить в качестве символа/строки параметр, а затем извлечь целочисленное значение в случае правильного ввода? В любом случае я настоятельно рекомендую не использовать _only_ 'int' type для ввода в случае возможного нечислового ввода. – penelope