вопрос по scanf () в C - PullRequest
       33

вопрос по scanf () в C

0 голосов
/ 27 апреля 2011

Какое точное значение приведенного ниже утверждения,

if (scanf("%lf", &x) != 1)

Я пытался вводить числа, условие true , в противном случае, когда я вводил символ без номера, такой как 'a', условие false .

Не могли бы вы рассказать мне больше о scanf() и значении 1?

Ответы [ 3 ]

4 голосов
/ 27 апреля 2011

Документация для scanf() в моей системе гласит:

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

Итак, результат scanf() в вашем случае равен 1, если было найдено число с плавающей запятой, в противном случае это 0. Тело оператора if выполняется, если возвращаемое значение не равно (!=) один.

3 голосов
/ 27 апреля 2011

man scanf

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

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

Значение EOF возвращается, если достигнут конец ввода до первого успешного преобразования или сбоя сопоставления.EOF также возвращается, если происходит ошибка чтения, и в этом случае устанавливается индикатор ошибки для потока (см. Ferror (3)), и устанавливается errno, обозначающий ошибку.

2 голосов
/ 27 апреля 2011

if (scanf ("% lf", & x)! = 1)

Если вы введете число 1 в качестве ввода, ваше состояние должно быть FALSE ;

"% lf" - это спецификатор преобразования, который преобразует ваше числовое значение в число с плавающей запятой

, если ваш ввод не числовой (то есть. ""Или" Z "или" {"и т. Д.) Ваш компилятор не знает, как преобразовать символ в действительное число.

scanf читает данные, введенные пользователемчерез стандартное устройство ввода и сохраняет его в переменной, имя и тип данных которой определяются программистом

...