C语言double与int运算后控制台无输出问题求解
问题原因
代码无输出的核心原因是printf函数的格式说明符与传入参数类型不匹配,触发了未定义行为:
- 你写的
%s是专门用于输出C风格字符串(即char*类型,指向以\0结尾的字符序列的指针)的占位符。 - 但你实际传入的
sonuc是double类型的浮点数,运算结果值为0.2。printf处理%s时,会把接收到的参数值直接解释为内存地址,尝试从该地址开始逐字节读取字符直到碰到\0才停止。这个由浮点数解析出来的地址基本都是进程无访问权限的非法地址,程序会直接异常终止,自然不会在控制台输出任何内容。
另外原代码的main函数没有写return 0;,虽然C99之后标准允许main函数省略return语句时默认返回0,但规范写法建议补上。
修复方案
将printf中的格式说明符替换为适配double类型的%f即可(printf的可变参数列表中float类型会自动提升为double,因此%f既可以输出float也可以输出double,%lf在printf中与%f效果完全一致)。
修复后的完整代码:
#include <stdio.h> int main() { double vergi = 0.01; int fiyat = 20; double sonuc = fiyat * vergi; printf("%f", sonuc); // 如果需要控制输出精度,比如保留2位小数可以写为 printf("%.2f", sonuc); return 0; }
编译运行后就会正常输出计算结果0.200000。
内容的提问来源于stack exchange,提问作者api xxx
相关产品推荐
相关产品推荐

