c++用printf输出小数不对哇?

下面代码输出后为啥是3.0?不应该是3.5吗?

#include <bits/stdc++.h>
using namespace std;
int main()
{
    double a=7/2;
    printf("%.1lf\n",a);
    return 0;
}

两个整数相除,系统默认得到一个整数,如7/3=2,8/3=2,18/10=1……
而想要得到小数,得在一个数的后面加个小数点,这样系统就会知道你想要的结果是小数而不是整数,改法如下:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    double a=7.0/2;//这里修改一下
    printf("%.1lf\n",a);
    return 0;
}

当然你也可以通过强制转换的方法,具体实现如下:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    double a;
    a=(double)7/2;
    printf("%.1lf\n",a);
    return 0;
}

double a=7/2;
->
double a=7.0/2;
除数被除数至少一个是浮点,否则是整除

double a=7.0/2
因为两整数相除结果为整数

当两个数相乘时,尽管你用了double类型,但是代码计算的是7 / 2所得的结果向下取整的值,若你要保留1位小数,且输出结果为3.5的话,你代码的第五行需改为

  double a = 7.0 / 2;

当你代码为7.0 / 2时,Dev—C++才知道你是需要浮点型。
所以,整体代码如下:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    double a=7.0 / 2;
    printf("%.1lf\n",a);
    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7636251
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C++用printf输出
  • 除此之外, 这篇博客: C语言printf输出在输入后显示中的 设置缓冲区为空 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    setvbuf(stdout,NULL,_IONBF,0);
    
  • 以下回答来自chatgpt:

    我已经给出了具体的解决方案。希望对你有所帮助!


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^