Я имею немного проблемы при работе с вложенными условными операторами в С.Вложенные условные операторы в C
int is_correct() {
char YN ;
printf("Y or N : ") ;
scanf("%c", &YN) ;
YN = toupper(YN) ;
return (YN == 'Y')? 1 : (YN == 'N')? 0 : is_correct() ;
}
Я был под впечатлением, что последняя строка кода будет возвращать 1 или 0, если в «Y» или «N» было введено или называть себя снова, если был введен неожиданный символ. Вместо этого он постоянно называет себя независимо от ввода.
Возможно, это не проблема, но я бы использовал круглые скобки в условном выражении: 'return (YN == 'Y')? 1: ((YN == 'N')? 0: is_correct()); ' – lurker
Почему вы пишете глупый код и ожидаете не-глупый ответ? –
@Mat: Нет, это не так. Пока условия завернуты в '()', как и в случае OP, нет никаких двусмысленностей при анализе этих условных операторов. Дополнительные '()' абсолютно не нужны. Для некоторых они могут улучшить читаемость, для некоторых они могут на самом деле ухудшить ситуацию. На самом деле условия '()' around тоже не нужны, но они помогают прочитать код. Что касается дополнительных '()' ... no, версия OP отлично. – AnT