2012-04-24 5 views
0

я закодированы следующие коды, но возникла проблемаКак работает функция scanf?

char p[20]; 
int n; 
errno = 0; 
n = scanf("%[^\n]",p); 
if (1 == n) 
{ 
    printf("%s\n",p); 
    scanf("%[^\n]",p); /*no waiting for input*/ 
    printf("%s\n",p); 
} 
+1

Проверить эту ссылку: http://stackoverflow.com/questions/6083045/scanf-n -skips-the-2-input-but-n-does-not-why – Spot

ответ

3
n = scanf("%[^\n]",p); 

Это говорит просканирует все символы, кроме \n т.е. ENTER ключ. Таким образом, вы можете ввести строку, и вы бы нажали ENTER. Это ENTER символ еще в stdin буфере, который завершит ваш следующий scanf заявление

scanf("%[^\n]",p);/*no executed*/ 

и, следовательно, , кажется вам, что вмятина выполнить! scanf, читает сначала из буфера, если он не находит там достаточного количества данных, а затем ждет вашего ввода.

Подача ENTER Вы ввели сначала некоторую функцию, например getchar(). т.е. добавить getchar(), прежде чем ваш второй scanf и теперь ваш второй scanf будет принимать входной от stdin

Что-то вроде

if (1 == n) 
{ 
    printf("%s %d\n",p,n); 
    getchar(); 
    scanf("%[^\n]",p);/*no executed*/ 
    printf("%s\n",p); 
} 
+0

Теперь он работает! Thx !!!!! – Fionser

+0

@Fionser см. Измененный код, который я вставил –

Смежные вопросы