qi___iq 2023-01-17 00:48 采纳率: 50%
浏览 40
已结题

自定义函数的返回值怎么返回

求大shen指点
程序描述:
先选择工资等级,在输入工作时间,程序将打印工资总额,税金,净收入
1,基本工资:money1美元/小时
2,加班(超过四十小时) = 1.5 * money1美元/小时
3,税率:前300美元 15%
续150美元 20%
余下的 25%

问题描述:
自定义函数switch1()的的返回值(在程序的最下面),无法应用到原函数,求大shen指点一下,这个程序到底那里出了问题?输入之后直接就没有在执行结果了,switch1()后面的printf也没有打印

img

检验的数据
(能返回到主函数应该就没有问题, 主要想问返回值的问题)
选3
普通工资10/hr
加班工资15/hr
输入100
输出
The all money is $ 1500.00.
The less money is $ 337.50.
The last money is $ 1162.50.

#include<stdio.h>
//#define money1 10.0            //每小时工资10$ 
//#define money2 15.0            //每小时工资15$ 

#define j_time 40                //时间界点 

#define s_money1 0.15            //税率1 
#define s_money2 0.2            //税率2 
#define s_money3 0.25            //税率3 

#define j_money1 300            //税率1所对应的最大金额 300 
#define j_money2 150            //税率2所对应的最大金额 150 

void show_menu(void);             //打印菜单函数原型 
float switch1(void);                //选中将选中的金额转换到主函数中 
int main(void)
{
    float time;                    //用户输入的工作时间 
    float z_money;                //税前工资 
    float shui = 0;                //税收金额         
    float jie;                    //税后工资
    float money1;                //每小时工资1 
    float money2;                //每小时工资2,是1的1.5 倍
    
    show_menu();                //打印菜单 
    
    money1 = switch1();            //导出所需要计算的金额 
    
    money2 = 1.5 * money1;
    
    printf("\nEnter your works' time:"); 
    
    scanf("%f", &time);
    
    //时间 
    if(money1 != 0)
    {
        if(time <= j_time)                //控制40小时上下的不同工资 
            z_money = time * money1;
        else
            z_money = time * money2;
    
        //金钱 
        if(z_money <= j_money1)
        {
            shui += (z_money * s_money1);            //300美元以内的税金 
            jie = z_money - shui;                    //税前工资 - 税金 
        }
        else if(z_money <= (j_money1 + j_money2)) 
        {
            shui += j_money1 * s_money1;                //300美元整的税金 
            shui += (z_money - j_money1) * s_money2;    //300美元整的税金加上续150美元以内的税金 
            jie = z_money - shui;                        //税前工资 - 税金 
        }
        else
        {
            shui += j_money1 * s_money1;                                //300美元整的税金 
            shui += j_money2 * s_money2;                                //续150美元整的税金 
            shui += ((z_money - (j_money1 + j_money2)) * s_money3);        //余下工资的税金 
            jie = z_money - shui;                                        //税前工资 - 税金 
        }
        
        printf("The all money is $ %0.2f.\n", z_money); 
        printf("The less money is $ %0.2f.\n", shui);
        printf("The last money is $ %0.2f.\n", jie);
    }
    
    printf("Bye!\n");
    
    return 0;
}  

void show_menu(void)                //打印选择菜单 
{
    char s1[] = "1) $8.75/hr";
    char s2[] = "2) $9.33/hr";
    char s3[] = "3) $10.00/hr";
    char s4[] = "4) $11.20/hr";
    char s5[] = "5) Quit!";
    
    printf("************************************************************\n"); 
    printf("%-40s", s1);
    printf("%-40s\n", s2);
    printf("%-40s", s3);
    printf("%-40s\n", s4);
    printf("%-40s\n", s5);
    printf("************************************************************\n"); 
} 

float switch1(void)                //根据菜单数值,赋相应的数值到b,返回主函数到money1 
{
    char a;
    float b;
    
    scanf("%c", a);
    
    switch(a)
    {
        case '1':
        {
            printf("Hello, you select $8.75/hr.\n");
            b = 8.75;
            break;
        }
        case '2':
        {
            printf("Hello, you select $9.33/hr.\n");
            b = 9.33;
            break;
        }
        case '3':
        {
            printf("Hello, you select $10.00/hr.\n");
            b = 10.00;
            break;
        }
        case '4':
        {
            printf("Hello, you select $11.20/hr.\n");
            b = 11.20;
            break;
        }
        case '5':
        {
            b = 0;                        //想法:输入0为了让主函数的程序跳过循环 
            break;
        }
    } 
    
    return b;                            //返回数值,但是主函数无法识别到 
} 

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-01-17 10:16
    关注

    第95行: scanf("%c", a); 变量a前面少了 ‘&’ 符,修改为: scanf("%c", &a);

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

报告相同问题?

问题事件

  • 系统已结题 1月25日
  • 已采纳回答 1月17日
  • 修改了问题 1月17日
  • 创建了问题 1月17日

悬赏问题

  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染