Поведение Scanf при чтении char - PullRequest
1 голос
/ 15 января 2012

У меня есть этот код,

int firstNum;
int secondNum;
char operator;

NSLog(@"Please enter the first number");
scanf("%i", &firstNum);
NSLog(@"Please enter the operator"); //Line 3
scanf("%c", &operator);
NSLog(@"Please enter the second number");
scanf("%i", &secondNum);

Когда я запускаю его и система достигает строки 3, он не ждет, пока пользователь введет символьное значение, вместо этого он сразу же выполняет следующую строку,Что не так?

1 Ответ

0 голосов
/ 15 января 2012

Вызов scanf("%c") не пропускает пробелы (см. scanf).

c Соответствует последовательности символов счетчика ширины (по умолчанию1);следующий указатель должен быть указателем на символ, и должно быть достаточно места для всех символов (завершающий NUL не добавляется). Обычный пропуск начального пробела подавляется. Чтобы сначала пропустить пробел, используйте явный пробел в формате.

Таким образом, он читает любую строку, заканчивающуюся символом, оставшуюся вбуфер после прочтения первого целого числа.

Чтобы явно пропустить пробел, вы можете заменить его на:

scanf(" %c", &operand);

Обратите внимание, что если пользователь вводит 123 + 234 и нажимает ввод в первом приглашениидва следующих scanf s не будут ждать ввода, а просто обработают + и 234.

Если это проблема, вместо этого прочитайте целые строки и используйте sscanf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...