为什么输入t是0时,输出t是48,输入t是1时,输出t是49…,而且g,s,g-s恒为-200000、-30000、-170000

#include <stdio.h>
#define s1 0.15
#define s2 0.2
#define s3 0.25
int main(void)
{
double t=0.0;
double g = 0.0;
double s=0.0;
printf("请输入工作时长");
t = getchar();
if (t < 40.0)
g = 1000.0 * t;
else
g = 40000.0 + (t - 40.0) * 4000.0 * 1.5;
if (g <= 300.0)
s = g * s1;
else if (g > 300.0 && g <= 450.0)
s = 300.0 * s1 + (g - 300.0) * s2;
else
s = 300.0 * s1 + 150.0 * s2 + (g - 450.0) * s3;
printf("%f %f %f %f",t, g, s, g - s);
return 0;
}

img

t 用 getchar() 是读取一个字符,你输入0获取的是字符'0',不是数值0
48是字符'0'的ascii编码,49是字符'1'的ascii编码,
你要读取double类型数值应该改成

scanf("%lf", &t);

你题目的解答代码如下:

#include <stdio.h>
#define s1 0.15
#define s2 0.2
#define s3 0.25
int main(void)
{
    double t = 0.0;
    double g = 0.0;
    double s = 0.0;
    printf("请输入工作时长");
    // t = getchar();
    scanf("%lf", &t);
    if (t < 40.0)
        g = 1000.0 * t;
    else
        g = 40000.0 + (t - 40.0) * 4000.0 * 1.5;
    if (g <= 300.0)
        s = g * s1;
    else if (g > 300.0 && g <= 450.0)
        s = 300.0 * s1 + (g - 300.0) * s2;
    else
        s = 300.0 * s1 + 150.0 * s2 + (g - 450.0) * s3;
    printf("%lf %lf %lf %lf", t, g, s, g - s);
    return 0;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

getchar是获取键盘输入的字符,你输入’0‘转换成ASCII码是48,’1‘的ASCII码对应的是49
读取int型数据要用scanf("%d", &t);

把getchar换成scanf,getchar读入的是字符,返回的是一个整数,把零转化成了ascii码值

将t = getchar();改为scanf("%lf",&t);如图:

img


其实主要原因就是 getchar()函数的作用是从计算机终端(一般为键盘)获取一个无符号字符。getchar()函数只能接收一个字符,其函数值就是从输入设备获取到的字符。
getchar()接收的是字符
,你如果输入了用它输入0 就相当于把1当作字符处理,0的ASCII码值为48,1的话就是49。而如果想输入一个浮点数进行计算,可以通过scanf("%lf",&t);语句来实现。
希望对题主有所帮助!望采纳!!

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632