Как работает scanf ()? - PullRequest
       16

Как работает scanf ()?

4 голосов
/ 18 января 2010

в Windows,

char c;
int i;

scanf("%d", &i);
scanf("%c", &c);

Компьютер пропускает извлечение символа из консоли, потому что \ n остается в буфере. Однако я обнаружил, что приведенный ниже код хорошо работает.

char str[10];
int i;

scanf("%d", &i);
scanf("%s", str);

Как и в предыдущем случае, \ n 'остается в буфере, но почему scanf успешно получает строку из консоли на этот раз?

Ответы [ 2 ]

6 голосов
/ 18 января 2010

со страницы руководства gcc (у ​​меня под рукой нет Windows):

% c: всегда соответствует фиксированному числу символов. Максимальная ширина поля говорит о том, как много символов для чтения; если вы не указываете максимум, по умолчанию используется значение 1. Он также не пропускает начальные пробельные символы.

% s: соответствует строке непробельных символов. Пропускает и сбрасывает начальный пробел, но останавливается, когда встречает больше пробелов после прочтения чего-либо. [Этот пункт должен объяснить поведение, которое вы видите. ]

2 голосов
/ 18 января 2010

Проблемы с пониманием вопроса, но scanf игнорирует все пробельные символы. n - символ пробела. Если вы хотите определить, когда пользователь нажимает клавишу ввода, вы должны использовать fgets.

fgets(str, 10, stdin);
...