zhangjunxian 发表于 2020-9-9 15:24:52

关于打印的问题

#include <stdio.h>
#define pai 3.14

int main()
{
          int r;
          printf("请输入半径:");
          scanf("%d", &r);
          
          printf("正在输出结果------------\n");
               
                float c,s;
               
                c = 2*pai*r;
                s = pai*r*r;
               
                printf("半径为%f的圆的面积是:%.2f, 周长是;%.2f\n", r, s, c);
               
                return 0;
}

我知道这里上面用的是int 而打印用的是float类型 那为什么 半径这里打印错误会导致后面的面积和周长也打印错误呢

#include <stdio.h>
#define pai 3.14

int main()
{
          int r;
          printf("请输入半径:");
          scanf("%d", &r);
          
          printf("正在输出结果------------\n");
               
                float c,s;
               
                c = 2*pai*r;
                s = pai*r*r;
               
                printf("半径为%d的圆的面积是:%.2f, 周长是;%.2f\n", r, s, c);
               
                return 0;
}

改成int 类型 半径 正确打印 后面的面积和周长也正确打印了 ,那到底是为什么会有这样的影响.....


sunrise085 发表于 2020-9-9 15:39:35

若把%d错写成%f,那么参数就会找错
printf("半径为%f的圆的面积是:%.2f, 周长是;%.2f\n", r, s, c);
格式化字符有三个%f,需要三个浮点数,但是后面有三个参数,第一个是int,会被跳过,把 s 赋值给第一个%f,然后把 c 赋给 %.2f ,最后一个 %.2f ,就没有值了,那么他输出的就可能是一个随机的数值,或者是0.00,这与编译器有关

zhangjunxian 发表于 2020-9-9 15:51:09

sunrise085 发表于 2020-9-9 15:39
若把%d错写成%f,那么参数就会找错
printf("半径为%f的圆的面积是:%.2f, 周长是;%.2f\n", r, s, c);
格 ...

那为什么打印出来的 半径并不是对应面积的值 面积也不是对应 周长的值.....
比如我输入5 那么说的话 输出的半径应该对应面积的值是78.5 面积是对应周长的值31.4
但是现在 输入5 输出的半径是0.00000 面积是一大串数字 周长 是0.00

sunrise085 发表于 2020-9-9 16:01:36

zhangjunxian 发表于 2020-9-9 15:51
那为什么打印出来的 半径并不是对应面积的值 面积也不是对应 周长的值.....
比如我输入5 那么说的话 输 ...

与编译器有关。总之,格式化字符与变量的数据类型不匹配的话,就会出现错误

zhangjunxian 发表于 2020-9-9 16:12:22

sunrise085 发表于 2020-9-9 16:01
与编译器有关。总之,格式化字符与变量的数据类型不匹配的话,就会出现错误

好吧,谢谢
页: [1]
查看完整版本: 关于打印的问题