scanf ошибочное поведение - PullRequest
       2

scanf ошибочное поведение

0 голосов
/ 24 сентября 2010

Я скомпилировал и запустил следующую консольную программу, которая должна прочитать целое число и вернуть число успешно прочитанных полей:

# include <stdio.h>
int main ( void )
   {
int result, number;
printf ( " Enter an integer :  \n ");
result=scanf ( " %d " , & number );
printf ( " Fields read % d " , result );
return 0;
   }

Я скомпилировал (VS 2008) и протестировал его на 2 машинах под WinVista, и в то время как на одной машине она работает как положено, в другом случае, когда я ввожу номер, scanf не возвращает и ждет дополнительного ввода.Я должен ввести другое целое число для его выхода и, кроме того, когда он выходит, он возвращает 1 в качестве значения результата, что неверно, поскольку я ввел 2 целых числа.

Я что-то упустил?

Ответы [ 2 ]

3 голосов
/ 24 сентября 2010

Пробелы в спецификации преобразования для scanf означают: «перепрыгивать и игнорировать пробелы во входных данных, если они есть».

«% d» в спецификации преобразования означает: «перепрыгнуть и пропустить пробелы, если они есть, затем прочитать int»

Итак, когда вы говорите «% d», вы говорите: «перепрыгивайте через пробелы, если есть, читайте int, перепрыгивайте через пробелы, если есть, останавливайтесь».

Когда вы вводите номер, это происходит:

input: 42<ENTER>
scanf: ^^          int
scanf:   ^^^^^^^   space

И после игнорирования scanf все еще находится в режиме "игнорирования пробела". Нужно «увидеть» что-то, а не пробел, чтобы «остановиться».

2 голосов
/ 24 сентября 2010

Это происходит потому, что в строке формата " %d " есть пробелы.

Попробуйте использовать "%d".

...