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 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗