Спецификаторы формата scanf()
отличаются от спецификаций printf()
. В частности, длина десятичных знаков не может быть указана там, поэтому флаги 0.2
до %f
недействительны. Просто используйте
scanf("%f",&i);
printf("enter value to struct\n");
scanf("%f",&rec.id);
Как отметил Джонатан Леффлер, однако можно указать общую длину числа (включая точку и десятичное число), например, с помощью %4f
для сканирования четырехзначного десятичного числа.
Кроме того, вы должны включить все предупреждения компилятора и прослушать их. Вы бы заметили предупреждения, которые показывают именно эту проблему.
Кроме того, вы должны проверить возвращаемые значения scanf()
, чтобы убедиться, что преобразование прошло успешно. В противном случае значения в ваших переменных остаются неинициализированными.
Две незначительные проблемы:
- Использование
int main (void)
- Явно возвращает значение из
main()
или вызывает exit(0)
(больше не требуется строго, если вы используете хотя бы стандарт C99)