c - 这里有什么问题?以及如何修复它

标签 c

int main(void)
{
    int a = 65;

char c = (char)a;
    int m = 3.0/2;

    printf("%c\n", c);              // output: A
    //printf("this %f\n", 5 / 2); //0.000000
    printf("%f\n", (float)a);       // output: 65.000000
    printf("this %f\n", 5 / 2);   //65.0000
    printf("%f\n", 5.0 / 2);        // output: 2.5000000
    //printf("this %f\n", 5 / 2);      2.500
    printf("%f\n", 5 / 2.0);        // output: 2.5000000
    //printf("this %f\n", 5 / 2); 2.5000
    printf("%f\n", (float)5 / 2);   // output: 2.5000000
    //printf("this %f\n", 5 / 2); 2.500
    printf("%f\n", 5 / (float)2);   // output: 2.5000000
    //printf("this %f\n", 5 / 2); 2.5000
    printf("%f\n", (float)(5 / 2)); // output: 2.0000000 - we cast only after division and result was 2
    //printf("this %f\n", 5 / 2); 2.0000000
    printf("%f\n", 5.0 / 2);        // output: 2.5000000
    //printf("this %f\n", 5 / 2); 2.500
    printf("%d\n", m);              // output: 1
    //printf("this %f\n", 5 / 2); 2.500

    system("PAUSE");
    return 0;
}

为什么每条评论中写的所有内容都发生了变化,为什么每条评论中都会发生这种变化? 例如,在第一条评论中,它是 0.00 为什么会发生这种情况以及如何修复它

最佳答案

问题是您通过使用错误的格式说明符调用未定义的行为。 5/2 将计算为 2,类型为 int,但您使用 %f 来打印它。您应该将 5/2 更改为 5.0/2,使其成为 double 类型,或者使用 %d 打印它>.

printf("this %f\n", 5.0/ 2);

printf("this %d\n", 5 / 2);

关于c - 这里有什么问题?以及如何修复它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53160622/

相关文章:

c - 为什么retarget.o归档到静态库中时,retarget.c中的 "_write"等函数没有链接?

c - a += b 比 C 中的 a = a + b 更有效吗?

c - pthreads - 加入一组线程,等待一个线程退出

c - 我不知道为什么它可以在计算上运行?

c++ - "make"是否知道如何在子目录中搜索包含文件?

c - 为什么 *(a+b) 在 C 而不是 a[b] 中工作?

使用 Clang 编译并使用 GETTEXT

c - 如何通过这个以结构体数组作为参数的函数返回正确的值?

c - 如何将对象添加到单向链表

cs50 pset3 - 排序