C语言能运行但是无法调用子函数,运行一直循环菜单

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct shouru//收入
{
    int num[20];
    char name[20];
    char kind[20];
    int date[20];
    int jinge[20];
    char beizhu[100];
}shouru[20];

struct zhichu//支出
{
    int num;
    char name[20];
    char kind[20];
    int date;
    int jinge;
    char beizhu[100];
}zhichu[20];

void caidan()
{
    printf("******************\n");
    printf("\t1.添加收入\n");
    printf("\t2.添加支出\n");
    printf("\t3.余额查询\n");
    printf("\t4.收支分类统计\n");
    printf("\t5.日常报表\n");
    printf("\t6.查询\n");
    printf("\t0.退出系统\n");
    printf("******************\n");
}

    int main()
    {
        
        while ()
        {
            int n;caidan();
            printf("请输入要执行的功能:");
            scanf("%d", &n);
            if (n == 0)
                break;
            else
                switch (n)
                {
                case 1:
                    void shourujilu();
                    break;
                case 2:
                    void zhichujilu();
                    break;
                case 3:
                    void yuechaxun();
                    break;
                case 4:
                    void shouzhifenleixitong();
                    break;
                case 5:
                    void richangbaobiao();
                    break;
                case 6:
                    void chaxun();
                    break;
                default:
                    printf("输入错误,请重新选择。\n");
                }
        }
        printf("系统退出,欢迎下次使用!\n");
        return 0;
    }
void shourujilu()
    {
        int i, j;
        float srzonge = 0;
        printf("执行输入功能!\n");
        printf("输入几条收入");
        scanf("%d", &i);
        for (j = 0; j < i; j++)
        {
            scanf("%d %s %s %d %f %s", &shouru[i].num, &shouru[i].name, &shouru[i].kind, &shouru[i].date, &shouru[i].jinge, &shouru[i].beizhu);
            srzonge = srzonge + *shouru[i].jinge;
        }
    }
    void zhichujilu()
    {
        int a, b;
        int zczonge = 0;
        printf("执行支出功能!\n");
        printf("输入几条支出");
        scanf("%d", &a);

        for (b = 0; b < a; b++)
        {
            scanf("%d %s %s %d %f %s", &zhichu[b].num, &zhichu[b].name, &zhichu[b].kind[b], &zhichu[b].date, &zhichu[b].jinge, &zhichu[b].beizhu);
            zczonge = zczonge + zhichu[b].jinge;
        }
    }
    void szfltj()
    {
        int i;
        double srsum = 0, zcsum = 0;
        printf("执行收支分类统计功能!\n");
        printf("收入统计");
        for (i = 0; i < 20; i++)
        {
            if (shouru[i].kind[i] == 'wx')
            {
                printf("%d %s %s %d %f %s", shouru[i].num, shouru[i].name, shouru[i].kind[i], shouru[i].date, shouru[i].jinge, shouru[i].beizhu);
                srsum = srsum + *shouru[i].jinge;
            }
            else if (*shouru->kind == 'zfb')
            {
                printf("%d %s %s %d %f %s", shouru[i].num, shouru[i].name, shouru[i].kind[i], shouru[i].date, shouru[i].jinge, shouru[i].beizhu);
                srsum = srsum + *shouru[i].jinge;
            }
            else
            {
                for (i = 0; i < 20; i++)
                {
                    printf("%d %s %s %d %f %s", shouru[i].num, shouru[i].name, shouru[i].kind[i], shouru[i].date, shouru[i].jinge, shouru[i].beizhu);
                    srsum = srsum + *shouru[i].jinge;
                }
            }
        }
        printf("支出统计");
        for (i = 0; i < 20; i++)
        {
            if (*zhichu[i].kind == 'wx')
            {
                printf("%d %s %s %d %f %s", shouru[i].num, shouru[i].name, shouru[i].kind[i], shouru[i].date, shouru[i].jinge, shouru[i].beizhu);
            }
            zcsum = zcsum + zhichu[i].jinge;
            if (*zhichu[i].kind == 'zfb')
            {
                for (i = 0; i < 20; i++)
                {
                    printf("%d %s %s %d %f %s", shouru[i].num, shouru[i].name, shouru[i].kind[i], shouru[i].date, shouru[i].jinge, shouru[i].beizhu);
                }
                zcsum = zcsum + zhichu[i].jinge;
            }
            else
            {
                printf("%d %s %s %d %f %s", shouru[i].num, shouru[i].name, shouru[i].kind[i], shouru[i].date, shouru[i].jinge, shouru[i].beizhu);
                zcsum = zcsum + zhichu[i].jinge;
            }
        }
    }
    void yuechaxun()
    {
        int o, i;
        int sum = 0;
        printf("输入要查询的账户号:\n");
        scanf("%d", &o);
        for (i = 0; i < 20; i++)
        {
            if (*shouru[i].num == o)
            {
                sum = sum + *shouru[i].num;
            }
        }
        for (i = 0; i < 20; i++)
        {
            if (zhichu[i].num == o)
            {
                sum = sum - zhichu[i].num;
            }
        }
        printf("当前账户余额为: %d\n", sum);
    }
    void richangbaobiao()
    {
        int i, j;
        printf("执行日常报表功能!\n");
        printf("请输入你要查询的月份");
        scanf("%d", &i);
        printf("序号 名字 支付种类 日期 金额 备注");
        for (j = 0; j < 20; j++)
        {
            if (*shouru[j].num == i)
            {
                printf("%d %s %s %d %f %s", shouru[j].num, shouru[j].name, shouru[j].kind, shouru[j].date, shouru[j].jinge, shouru[j].beizhu);
            }
            else if (zhichu[j].num == i)
            {
                printf("%d %s %s %d %f %s", zhichu[j].num, zhichu[j].name, zhichu[j].kind, zhichu[j].date, zhichu[j].jinge, zhichu[j].beizhu);
            }
            else if (shouru[j].num && zhichu[j].num == i)
            {
                printf("%d %s %s %d %f %s", shouru[j].num, shouru[j].name, shouru[j].kind, shouru[j].date, shouru[j].jinge, shouru[j].beizhu);
                printf("%d %s %s %d %f %s", zhichu[j].num, zhichu[j].name, zhichu[j].kind, zhichu[j].date, zhichu[j].jinge, zhichu[j].beizhu);
            }

        }
        void chaxun();
        {
            int t;
            printf("执行查询功能!\n");
            printf("******************\n");
            printf("\t1.序号查询\n");
            printf("\t2.名字查询\n");
            printf("\t3.支付种类查询\n");
            printf("\t4.支付时间查询\n");
            printf("\t0.退出查询\n");
            printf("******************\n");
            scanf("%d", &t);
            switch (t)
            {
            case 0:
                break;
            case 1:
                printf("请输入你要查询的序号:");
                int i, k;
                scanf("%d",&i);
                for (k = 0; k < 20; k++)
                {
                    if (*shouru[k].num == i)
                    {
                        printf("%d %s %s %d %f %s", shouru[k].num, shouru[k].name, shouru[k].kind, shouru[k].date, shouru[k].jinge, shouru[k].beizhu);
                    }
                    else if (zhichu[k].num == i)
                    {
                        printf("%d %s %s %d %f %s", zhichu[k].num, zhichu[k].name, zhichu[k].kind, zhichu[k].date, zhichu[k].jinge, zhichu[k].beizhu);
                    }
                    else if (shouru->num && zhichu->num == i)
                    {
                        printf("%d %s %s %d %f %s", shouru[k].num, shouru[k].name, shouru[k].kind, shouru[k].date, shouru[k].jinge, shouru[k].beizhu);
                        printf("%d %s %s %d %f %s", zhichu[k].num, zhichu[k].name, zhichu[k].kind, zhichu[k].date, zhichu[k].jinge, zhichu[k].beizhu);
                    }
                    else
                    {
                        printf("您输入的序号不存在");
                    }
                }
                break;

            case 2:
                int h;
                char a[10];
                printf("请输入你要查询的名字:");
                scanf("%s", &a[10]);
                for (h = 0; h < 20; h++)
                {
                    if (*shouru[h].name == a[10])
                    {
                        printf("%d %s %s %d %f %s", shouru[h].num, shouru[h].name, shouru[h].kind, shouru[h].date, shouru[h].jinge, shouru[h].beizhu);
                        printf("%d %s %s %d %f %s", zhichu[h].num, zhichu[h].name, zhichu[h].kind, zhichu[h].date, zhichu[h].jinge, zhichu[h].beizhu);
                    }
                    else if (*zhichu[h].name == a[10])
                    {
                        printf("%d %s %s %d %f %s", zhichu[h].num, zhichu[h].name, zhichu[h].kind, zhichu[h].date, zhichu[h].jinge, zhichu[h].beizhu);
                    }
                    else if (*shouru->name && *zhichu->name == a[10])
                    {
                        printf("%d %s %s %d %f %s", shouru[h].num, shouru[h].name, shouru[h].kind, shouru[h].date, shouru[h].jinge, shouru[h].beizhu);
                        printf("%d %s %s %d %f %s", zhichu[h].num, zhichu[h].name, zhichu[h].kind, zhichu[h].date, zhichu[h].jinge, zhichu[h].beizhu);
                    }
                    else
                    {
                        printf("您输入的名字不存在");
                    }
                }
                break;

            case 3:
                int l;
                char b[10];
                printf("请输入你要查询支付的种类:");
                scanf("%s", &b[10]);
                for (l = 0; l < 20; l++)
                {
                    if (*shouru[l].kind == b[10])
                    {
                        printf("%d %s %s %d %f %s", shouru[l].num, shouru[l].name, shouru[l].kind, shouru[l].date, shouru[l].jinge, shouru[l].beizhu);
                    }
                    else if (*zhichu[l].kind == b[10])
                    {
                        printf("%d %s %s %d %f %s", zhichu[l].num, zhichu[l].name, zhichu[l].kind, zhichu[l].date, zhichu[l].jinge, zhichu[l].beizhu);
                    }
                    else if (*shouru->kind && *zhichu->kind == b[10])
                    {
                        printf("%d %s %s %d %f %s", shouru[l].num, shouru[l].name, shouru[l].kind, shouru[l].date, shouru[l].jinge, shouru[l].beizhu);
                        printf("%d %s %s %d %f %s", zhichu[l].num, zhichu[l].name, zhichu[l].kind, zhichu[l].date, zhichu[l].jinge, zhichu[l].beizhu);
                    }
                    else
                    {
                        printf("您输入的支付种类不存在!");
                    }
                }
                break;

            case 4:
                int m;
                int c[10];
                printf("请输入你要查询的时间:");
                scanf("%d", &c[10]);
                for (m = 0; m < 20; m++)
                {
                    if (*shouru->date == c[10])
                    {
                        printf("%d %s %s %d %f %s", shouru[m].num, shouru[m].name, shouru[m].kind, shouru[m].date, shouru[m].jinge, shouru[m].beizhu);
                    }
                    else if (zhichu->date == c[10])
                    {
                        printf("%d %s %s %d %f %s", zhichu[m].num, zhichu[m].name, zhichu[m].kind, zhichu[m].date, zhichu[m].jinge, zhichu[m].beizhu);
                    }
                    else if (shouru->date && zhichu->date == c[10])
                    {
                        printf("%d %s %s %d %f %s", shouru[m].num, shouru[m].name, shouru[m].kind, shouru[m].date, shouru[m].jinge, shouru[m].beizhu);
                        printf("%d %s %s %d %f %s", zhichu[m].num, zhichu[m].name, zhichu[m].kind, zhichu[m].date, zhichu[m].jinge, zhichu[m].beizhu);
                    }
                    else
                    {
                        printf("您输入的时间不存在");
                    }
                }
                break;
            }
        }

    }


while ()这是啥,这东西能编译,不报错?
case里void shourujilu();这是函数声明,不是函数调用
把声明放到main函数的前面去,case里的void都删掉

有两处代码有问题。

# 在case语句中调用函数时,漏掉了函数名称和参数:

case 1: 
    void shourujilu(); 
    break;

# 应该写为:

c
case 1: 
    shourujilu(); 
    break;

# 在定义函数原型时,漏掉了参数列表:

c
void shourujilu() 

# 应该写为:

c
void shourujilu();
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7525410
  • 你也可以参考下这篇文章:C语言中,调用自编子函数对输入数组进行从小到大排序
  • 同时,你还可以查看手册:c语言-成员访问与间接 中的内容
  • 除此之外, 这篇博客: C语言猴子吃桃问题(两种方法)中的 运行结果: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 总数有1534个

     方法2:

    用递归的方法,当n=10天时,返回int n=1;

    #include <stdio.h>
    int getPeachNumber(int n)  //这里要定义n,要不编译器会报错!
    {
        int num;    
        if(n==10)
        {
           return 1;      
        } 
        else
        {
            num = (getPeachNumber(n+1)+1)*2;  
            printf("第%d天所剩桃子%d个\n", n, num); 
        }
        return num;
    }
    int main()
    {
        int num = getPeachNumber(1);
        printf("猴子第一天摘了:%d个桃子。\n", num);
        return 0;
    }

    运行结果:

    第9天所剩桃子4个
    第8天所剩桃子10个
    第7天所剩桃子22个
    第6天所剩桃子46个
    第5天所剩桃子94个
    第4天所剩桃子190个
    第3天所剩桃子382个
    第2天所剩桃子766个
    第1天所剩桃子1534个
    猴子第一天摘了:1534个桃子。

     

  • 您还可以看一下 李飞老师的C语言开发之数据结构与算法一课程中的 如何分析算法的执行效率小节, 巩固相关知识点