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

#c #function #scanf

Вопрос:

Каков точный смысл приведенного ниже утверждения,

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

Я попытался ввести числа, условие истинно,в противном случае, когда я ввожу не числовой символ, такой как «a», условие ложно.

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

Ответ №1:

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

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

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

Ответ №2:

man scanf

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

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

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

Ответ №3:

если (scanf(«%lf», amp;x) != 1)

Если вы введете число 1 в качестве входных данных, ваше условие должно быть ЛОЖНЫМ;

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

когда ваш ввод является нечисловым (т. Е. «A» или «Z» или «{» и т. Д.) Ваш компилятор не знает, как преобразовать символ в действительное число.

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