为何printf()的%F格式说明符在Code::Blocks 20.03中无法正常工作?
printf中%F格式符在Code::Blocks 20.03输出为空的问题
问题场景
使用printf()输出浮点数时,已知%f和%F都是合法的格式说明符,但在Code::Blocks 20.03中用%F时,输出结果为空,而非预期的浮点数内容。
代码示例:
#include<stdio.h> #include<float.h> int main() { float decimal_floating_point = 1.234567; float Decimal_Floating_Point = 123.4567; printf("decimal floating point = [%f]\n", decimal_floating_point); printf("Decimal Floating Point = [%F]\n", Decimal_Floating_Point); }
实际输出:
decimal floating point = [1.234567] Decimal Floating Point = []
原因分析
Code::Blocks 20.03默认配套的MinGW GCC版本(一般是8.1.0)中,%F格式符是C99标准才引入的特性,而默认编译选项没有开启C99或更高版本的语言标准。此时printf无法识别%F这个格式符,触发未定义行为,最终导致对应位置没有输出内容。
简单来说:旧版本MinGW的默认编译标准不支持%F,不认这个格式符,所以没输出。
解决方法
开启C99及以上编译标准
打开Code::Blocks的设置:Settings -> Compiler -> Compiler settings -> Other options,添加编译参数-std=c99(或者更高版本的-std=c11/-std=c17),保存后重新编译运行,就能正常输出%F对应的内容。替换为
%f格式符
如果不需要大写形式的浮点数输出(比如INF/NAN的大写),直接把%F换成%f,在默认编译标准下就能正常工作,输出结果和预期一致。
验证结果
开启C99标准后,代码会输出:
decimal floating point = [1.234567] Decimal Floating Point = [123.4567]
(注:浮点数的实际输出小数位数可能因精度略有差异)
内容的提问来源于stack exchange,提问作者Fatih Ceyhan
相关产品推荐
相关产品推荐

