2015-06-09 8 views
3
#include<stdio.h> 
int main() 
{ 
    printf("%d",EOF); 
} 

генерирует -1, который является полностью хорошо, ноВыходной конец файла, используя% F

#include<stdio.h> 
int main() 
{ 
    printf("%f",EOF); 
} 

производит 0.000. Как кто-то может объяснить это, когда ожидаемый результат равен -1.000?

ответ

5

Использование неправильного спецификатора формата для любого конкретного аргумента в printf() вызывает undefined behaviour.

EOF имеет тип int. Вы можете использовать только %d для переменной типа int.

FWIW, если вы хотите, представление с плавающей точкой в ​​int, вы должны cast переменных (но я лично рекомендую, чтобы избежать этого)

printf("%f",(float)EOF); 
+0

И большинство компиляторов могут предупредить вас (например, скомпилировать код нарушения с помощью 'gcc -Wall') –

+0

@BasileStarynkevitch да, вы правы. :-) –

5

EOF имеет int (signed) тип. Вы не должны использовать неправильный спецификатор формата для печати int, иначе он будет вызывать неопределенное поведение.

+0

@YuHao Да, я думаю, вы правы. Я не помню, где, но я видел где-то, используя '% d' для печати EOF. Я считаю, что это было правильно (никто не возражал). –

+0

@YuHao; Сожалею. Это была опечатка. Я имею в виду «подписанный», конечно. – haccks