Семейство scanf. Баг libc или нет? - C (СИ)
Формулировка задачи:
Начнем с примера:Сборка:Подадим на вход строкуПолучим на выходе:Версия 4.8.1.
Вопрос, почему оно работает? Ведь по стандарту (6.4.4.2) то, что мы ввели не является действительной константой. Вдобавок, в разделе про fscanf (7.19.6.2 п. 19, 20) четко указано, что в данном случае функция должна была вернуть ноль.
ЗЫ, видел в багзилле аналогичный баг на glibc, но там вообще неясно чем кончилось.
#include <stdio.h> #include <stdlib.h> int main(void) { int count = 0; float f = 0.0f; count = scanf("%f", &f); printf("Value = %f, count = %d\n", f, count); getchar(); return 0; }
CC=gcc CFLAGS=-c -std=c89 -Wall -Wextra all: test.exe test.exe: main.o $(CC) main.o -o $@ main.o: main.c $(CC) $(CFLAGS) main.c -o $@
3e
Value = 3.0000, count = 1
ЗЫЫ, что забавно, сильно мной нелюбимый xlc ведет себя как надо (т.е. 0.0 и 0 на stdout).
Решение задачи: «Семейство scanf. Баг libc или нет?»
textual
Листинг программы
% tcc -run test.c 12zzzz Value = 12.000000, count = 1
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д