я закодированы следующие коды, но возникла проблемаКак работает функция 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);
}
я закодированы следующие коды, но возникла проблемаКак работает функция 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);
}
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);
}
Теперь он работает! Thx !!!!! – Fionser
@Fionser см. Измененный код, который я вставил –
Проверить эту ссылку: http://stackoverflow.com/questions/6083045/scanf-n -skips-the-2-input-but-n-does-not-why – Spot