Как уже упоминалось, вы должны использовать getchar()
, если вам нужен только один символ. Если вы по-прежнему хотите использовать scanf()
по любой причине, правильный формат - "%c"
, а не "%s"
.
Я бы также предположил, что если вы ищете один символ, блок if
выглядит немного "занятым" (читай, неудобно) ... переключатель был бы более чистым и элегантным способом сделать это ( ИМХО).
/* something like this ... */
switch ( selection ) {
case '1':
case 's':
case 'S':
printf ( "Hello\n" );
break;
case '2':
case 'e':
case 'E':
i = 0;
break;
}
Другая пара вещей ... если вас не волнует случай чтения символа (т. Е. 's'
и 'S'
будут делать то же самое), вы можете преобразовать selection
в верхний регистр перед вашим if
-блоком или switch
-блоком, используя toupper()
. Кроме того, и это всего лишь совет по стилю, не используйте i
в качестве флага выхода. Общая практика состоит в том, чтобы использовать такие значения, как i
и j
для счетчиков или индексов - вы можете использовать что-то вроде quit_now
или user_done
, которое более точно передало бы значение переменной.