Kgxce 2022-07-06 00:00 采纳率: 100%
浏览 38
已结题

关于getchar和scanf获取字符的区别

问题遇到的现象和发生背景

该代码是为了实现c primer plus 6 中第7章编程练习第8题
发现用getchar获得数字的输入和scanf获得输入的结果不一样,前者无法运行

问题相关代码,请勿粘贴截图

#include<stdio.h>
#define rate1 0.15
#define rate2 0.20
#define rate3 0.25

int main() {
float sm1,sm2, h,tax,m;
int num;

printf("enter the number corresponding to the desired pay rate or action:\n");
printf("1) $8.75/hr\t\t2) $9.33/hr\n");
printf("3) $10.00/hr\t\t4) $11.20/hr\n5) quit\n");
printf("\n");
a1:printf("请输入1到5中的数字\n");
scanf("%d",&num);                                                       //这一行                                                                  
switch (num) {
  case 1:
     m = 8.75;
     break;
  case 2 : 
     m = 9.33;
     break;
  case 3:
     m = 10.00;
     break;
  case 4 :
     m = 11.20;
     break; 
  case 5 :
     break;
  default:
     goto a1;
}

printf("请输入一周的工作时间\n");
scanf("%f",&h);
if (h > 40)
    h = (h - 40) * 1.5 + h;
sm1 = m * h;
if (sm1 <= 300) {
    tax = sm1 * rate1;
    sm2 = sm1 - tax;
}
else if (sm1<=450) {
    tax = 45 + (sm1 - 300) * rate2;
    sm2 = sm1 - tax;
}
else
{
    tax = 45 + 30 + (sm1 - 450) * rate3;
    sm2 = sm1 - tax;
}

printf("你的工资总额是%f,你应缴纳的税金是%f,所以你的净收入是%f",
sm1,tax,sm2);

return 0;

}

运行结果及报错内容

当把//(代码中标注)这一行的代码换成num=getchar()时,它就会出现如图情况

img

我的解答思路和尝试过的方法

getchar()和scanf()都能得到输入的值,而且这里只需要读取一个字符,为什么不可以互换

我想要达到的结果

希望能帮忙解释下这里无法使用getchar获得数字的原因

  • 写回答

3条回答 默认 最新

  • 张宜强 Java领域优质创作者 2022-07-06 09:03
    关注

    getchar只能读取一个字符,如果想得到输入的值,需要减去'0'

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月14日
  • 已采纳回答 7月6日
  • 创建了问题 7月6日

悬赏问题

  • ¥15 Python语言实验
  • ¥15 SAP HANA SQL 增加合计行
  • ¥20 用C#语言解决一个英文打字练习器,有偿
  • ¥15 srs-sip外部服务 webrtc支持H265格式
  • ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动
  • ¥15 大一C语言期末考试,求帮助🙏🙏
  • ¥15 ch340驱动未分配COM
  • ¥15 Converting circular structure to JSON
  • ¥30 Hyper-v虚拟机相关问题,求解答。
  • ¥15 TSM320F2808PZA芯片 Bootloader