Если scanf
не может извлечь 3 числа при разборе , соответствующие переменные остаются неизменными, т.е. неинициализируются в вашем случае. Доступ к неинициализированным переменным дает неопределенное поведение, которое может быть некоторым индетерминистическим результатом, но теоретически может быть также не выводимым.
В коде есть две вещи: во-первых, инициализирующие переменные; вторых, проверить возвращаемое значение scanf
, который обозначает количество элементов, которые были успешно считанных и присвоенных:
#include<stdio.h>
main()
{
int a=0,b=0;
float f=0.0;
int nrOfItemsRead = scanf("%2d%3d%4f",&a,&b,&f);
if (nrOfItemsRead == 3) {
printf("%d %d %f",a,b,f);
}
else {
printf("wrong input.");
}
return 0;
}
ввода/вывода:
12 34 12.5
12 34 12.500000
.
wrong input.
Неопределенное поведение для использования значения объекта с автоматической продолжительностью хранения, пока она не определена. – EOF
Есть ли какая-либо логика выхода? –
Нет, в отличие от некоторых языков, значения ваших переменных «a», «b» и «f» могут иметь любое значение, поскольку вы не инициализировали их. И 'scanf()' будет сохранять только столько значений, сколько соответствует вводу (в случае «.» Это ни один из них). BTW, scanf возвращает количество совпадений, которые он нашел. –