子程序无法运行成功,在黑窗口总是输入完就结束了



#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
typedef struct shouru//收入
{
    char num[10];
    char name[20];
    char kind[20];
    char date[20];
    int jinge;
    char beizhu[100];
    int total=0;
}shouru;
shouru shouruchucun[100];
typedef struct zhichu//支出
{
    char num[20];
    char name[20];
    char kind[20];
    char date[20];
    int jinge;
    char beizhu[100];
}zhichu;
zhichu zhichuchucun[100];

int g = 0;//收入个数
int p = 0;//支出个数
int j = 0;//收入金额
int y = 0;//支出金额

void shuoru1() //收入输入 
{
    int i = 1;
    
    do
    {
        shouru shouru;
        printf("\n请输入序号、姓名、收入类别、收入日期(如6)、收入金额、收入备注\n");
        scanf("%s %s %s %s %d %s", shouruchucun[i].num[10], shouruchucun[i].name[20], shouruchucun[i].kind[20], shouruchucun[i].date[20], shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
        shouru.total=shouru.total+shouru.jinge;
        printf("kkkk");
        g++;
        printf("若要继续输入按1 or 按0\n");
        scanf("%d", &i);
    } while (i == 1);
    
}
void zhichu1() //支出输入
{
    int i = 1;
    
    do
    {
        printf("\n请输入收入类别、收入金额、收入备注\n");
        scanf("%s %s %s %s %d %s", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
        y = y + zhichuchucun[i].jinge;
        p++;
        printf("若要继续输入按1 or 按0\n");
        scanf("%d", &i);
    } while (i == 1);
}
void yuechaxun()//余额查询
{
    int sum = 0;
    sum = j - y;
    printf("当前账户余额为: %d\n",sum);
}
void szfltj()//支付分类统计
{
    int i;
    double srsum = 0, zcsum = 0;
    printf("执行收支分类统计功能!\n");
    printf("收入统计");
    printf("输入几条收入");
    printf("请输入序号、名字、种类、日期、金额、备注");
    for (i = 0; i < j; i++)
    {
        if (strcmp(shouruchucun[i].kind,"wx")==0 )
        {
            printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name[20], shouruchucun[i].kind[20], shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
            srsum = srsum + shouruchucun[i].jinge;
        }
        else if (0 == strcmp(shouruchucun[i].kind, "zfb"))
        {
            printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name[20], shouruchucun[i].kind[20], shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
            srsum = srsum + shouruchucun[i].jinge;
        }
        else
        {
            for (i = 0; i < j; i++)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind[20], shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
                srsum = srsum + shouruchucun[i].jinge;
            }
        }
    }
    int k;
    printf("支出统计");
    printf("输入几条支出");
    scanf("%d", &k);
    for (i = 0; i < k; i++)
    {
        if ( strcmp(zhichuchucun[i].kind, "wx") == 0)
        {
            printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name[20], zhichuchucun[i].kind[20], zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu[100]);
        }
        zcsum = zcsum + zhichuchucun[i].jinge;
        if (strcmp(zhichuchucun[i].kind, "zfb") ==0)
        {
            for (i = 0; i < k; i++)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name[20], zhichuchucun[i].kind[20], zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu[100]);
            }
            zcsum = zcsum + zhichuchucun[i].jinge;
        }
        else
        {
            printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name[20], zhichuchucun[i].kind[20], zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu[100]);
            zcsum = zcsum + zhichuchucun[i].jinge;
        }
    }
}
void richang()
{
    char i=0, k, t[50];
    printf("输入当前月份:\n");
    scanf("%s", &t);
    printf("收入报表\n");
    printf("账户号,姓名,数目,日期,类别,备注\n");
    if (strcmp(zhichuchucun[i].date, t) == 0)
    {
        for (i = 0; i < g; i++)
        {
            printf("%d%s%d%s%s%s\n", &shouruchucun[i].num, &shouruchucun[i].name, &shouruchucun[i].kind, &shouruchucun[i].date, &shouruchucun[i].jinge, &shouruchucun[i].beizhu);
        }
    }
    printf("支出报表\n");
    printf("账户号,姓名,数目,日期,类别,备注\n");
    if (strcmp(zhichuchucun[i].date, t) == 0)
    {
        for (i = 0; i < p; i++)
        {
            printf("%d%s%d%s%s%s\n", &zhichuchucun[i].num, &zhichuchucun[i].name, &zhichuchucun[i].kind, &zhichuchucun[i].date, &zhichuchucun[i].jinge, &zhichuchucun[i].beizhu);
        }
    }


    printf("余额报表\n");
    k = j - y;
    printf("当前余额为&d", k);
}
void chaxun() //查询
{
    char j[50];
    int n = 0;
    printf("******************\n");
    printf("查询功能\n");
    printf("1. 按序号查询\n");
    printf("2. 按日期检索\n");
    printf("3. 按类别检索\n");
    printf("******************\n");
    scanf("%d", &n);

    switch (n)
    {
    case 1:
        printf("输入序号: ");
        scanf("%s", &j);
        for (int i = 0; i < g; i++)
        {
            if (strcmp(shouruchucun[i].num, j) == 0)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name[20], shouruchucun[i].kind[20], shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
            }
            if (strcmp(zhichuchucun[i].num, j) == 0)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name[20], zhichuchucun[i].kind[20], zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu[100]);
            }
        }
        break;
    case 2:
        printf("日期查询: ");
        scanf("%s", j);
        for (int i = 0; i < g; i++)
        {
            if (strcmp(shouruchucun[i].date, j) == 0)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name[20], shouruchucun[i].kind[20], shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
            }
            if (strcmp(zhichuchucun[i].num, j) == 0)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name[20], zhichuchucun[i].kind[20], zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu[100]);
            }
        }
        break;
    case 3:
        printf("类别查询: \n");
        scanf("%s", j);
        for (int i = 0; i < g; i++)
        {
            if (strcmp(shouruchucun[i].kind, j) == 0)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name[20], shouruchucun[i].kind[20], shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
            }
            if (strcmp(zhichuchucun[i].num, j) == 0)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name[20], zhichuchucun[i].kind[20], zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu[100]);
            }
        }
        break;
    default:
        printf("输入有误,请重新选择!\n");
    }
}
int main()
{
    int n = 0;
    while (n != 7)
    {
        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");
        scanf("%d", &n);
        if (n == 0)
            break;
        switch (n)
        {
        case 1:
            shuoru1();
            break;
        case 2:
            zhichu1();
            break;
        case 3:
            yuechaxun();
            break;
        case 4:
            szfltj();
            break;
        case 5:
            richang();
            break;
        case 6:
            chaxun:
            break;
        default:
            printf("输入有误,请重新选择!\n");
        }
    }

    return 0;
}

运行界面截图看看
42行错误,将所有[20]这样的中括号带数字的都删掉。只需要变量名,不要带数组大小,带了就是数组的第20个元素的意思啦。
后面的printf语句也都是这样的错误
但57行又是写对了,参考一下吧。得统一啊
printf语句的num是对的,后面都错了

结构体的使用不太熟悉哦,里面错误比较多,给你修改了代码,自己参考,如果有问题私聊。

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
typedef struct//收入
{
    char num[10];
    char name[20];
    char kind[20];
    char date[20];
    int jinge;
    char beizhu[100];
    int total;
}shouru;
shouru shouruchucun[100];
typedef struct//支出
{
    char num[20];
    char name[20];
    char kind[20];
    char date[20];
    int jinge;
    char beizhu[100];
}zhichu;
zhichu zhichuchucun[100];
 
int g = 0;//收入个数
int p = 0;//支出个数
int j = 0;//收入金额
int y = 0;//支出金额
 
void shuoru1() //收入输入 
{
    int i = 1;
    shouru shouru1;

    do
    {
        
        printf("\n请输入序号、姓名、收入类别、收入日期(如6)、收入金额、收入备注\n");
        scanf("%s %s %s %s %d %s", shouruchucun[g].num, shouruchucun[g].name, shouruchucun[g].kind, shouruchucun[g].date, &shouruchucun[g].jinge, shouruchucun[g].beizhu);
        shouru1.total=shouru1.total+shouru1.jinge;
        printf("kkkk");
        g++;
        printf("若要继续输入按1 or 按0\n");
        scanf("%d", &i);
    } while (i == 1);
    
}
void zhichu1() //支出输入
{
    int i = 1;
    
    do
    {
        printf("\n请输入收入类别、收入金额、收入备注\n");
        scanf("%s %s %s %s %d %s", zhichuchucun[p].num, zhichuchucun[p].name, zhichuchucun[p].kind, zhichuchucun[p].date, &zhichuchucun[p].jinge, zhichuchucun[p].beizhu);
        y = y + zhichuchucun[i].jinge;
        p++;
        printf("若要继续输入按1 or 按0\n");
        scanf("%d", &i);
    } while (i == 1);
}
void yuechaxun()//余额查询
{
    int sum = 0;
    sum = j - y;
    printf("当前账户余额为: %d\n",sum);
}
void szfltj()//支付分类统计
{
    int i;
    double srsum = 0, zcsum = 0;
    int k,m;
    printf("执行收支分类统计功能!\n");
    printf("收入统计");
    printf("输入几条收入小于等于%d\n",g);
    
    scanf("%d", &m);
    printf("请输入序号、名字、种类、日期、金额、备注");
    for (i = 0; i < m; i++)
    {
        if (strcmp(shouruchucun[i].kind,"wx")==0 )
        {
            printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
            srsum = srsum + shouruchucun[i].jinge;
        }
        else if (0 == strcmp(shouruchucun[i].kind, "zfb"))
        {
            printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
            srsum = srsum + shouruchucun[i].jinge;
        }
        else
        {
            for (i = 0; i < j; i++)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
                srsum = srsum + shouruchucun[i].jinge;
            }
        }
    }
   
    printf("支出统计");
    printf("输入几条支出小于等于%d\n",p);
    scanf("%d", &k);
    for (i = 0; i < k; i++)
    {
        if ( strcmp(zhichuchucun[i].kind, "wx") == 0)
        {
            printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
        }
        zcsum = zcsum + zhichuchucun[i].jinge;
        if (strcmp(zhichuchucun[i].kind, "zfb") ==0)
        {
            for (i = 0; i < k; i++)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
            }
            zcsum = zcsum + zhichuchucun[i].jinge;
        }
        else
        {
            printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
            zcsum = zcsum + zhichuchucun[i].jinge;
        }
    }
}
void richang()
{
    char i=0, k, t[50];
    printf("输入当前月份:\n");
    scanf("%s", t);
    printf("收入报表\n");
    printf("账户号,姓名,数目,日期,类别,备注\n");
    if (strcmp(zhichuchucun[i].date, t) == 0)
    {
        for (i = 0; i < g; i++)
        {
            printf("%s%s%s%s%d%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
        }
    }
    printf("支出报表\n");
    printf("账户号,姓名,数目,日期,类别,备注\n");
    if (strcmp(zhichuchucun[i].date, t) == 0)
    {
        for (i = 0; i < p; i++)
        {
            printf("%s%s%s%s%d%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
        }
    }
 
 
    printf("余额报表\n");
    k = j - y;
    printf("当前余额为%d", k);
}
void chaxun() //查询
{
    char tab[50];
    int n = 0;
    printf("******************\n");
    printf("查询功能\n");
    printf("1. 按序号查询\n");
    printf("2. 按日期检索\n");
    printf("3. 按类别检索\n");
    printf("******************\n");
    scanf("%d", &n);
 
    switch (n)
    {
    case 1:
        printf("输入序号: ");
        scanf("%s", tab);
        for (int i = 0; i < g; i++)
        {
            if (strcmp(shouruchucun[i].num, tab) == 0)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
            }
            if (strcmp(zhichuchucun[i].num, tab) == 0)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
            }
        }
        break;
    case 2:
        printf("日期查询: ");
        scanf("%s", tab);
        for (int i = 0; i < g; i++)
        {
            if (strcmp(shouruchucun[i].date, tab) == 0)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
            }
            if (strcmp(zhichuchucun[i].num, tab) == 0)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
            }
        }
        break;
    case 3:
        printf("类别查询: \n");
        scanf("%s", tab);
        for (int i = 0; i < g; i++)
        {
            if (strcmp(shouruchucun[i].kind, tab) == 0)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
            }
            if (strcmp(zhichuchucun[i].num, tab) == 0)
            {
                printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
            }
        }
        break;
    default:
        printf("输入有误,请重新选择!\n");
    }
}
int main()
{
    int n = 0;
    while (n != 7)
    {
        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");
        scanf("%d", &n);
        if (n == 0)
            break;
        switch (n)
        {
        case 1:
            shuoru1();
            break;
        case 2:
            zhichu1();
            break;
        case 3:
            yuechaxun();
            break;
        case 4:
            szfltj();
            break;
        case 5:
            richang();
            break;
        case 6:
            chaxun:
            break;
        default:
            printf("输入有误,请重新选择!\n");
        }
    }
 
    return 0;
}

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/353035
  • 你也可以参考下这篇文章:数据结构课设 银行排队问题之单队列多窗口服务
  • 您还可以看一下 赖国荣老师的微信生活缴费商业项目标准版课程中的 第4讲:查询接口报文参数的详细介绍,加密及异常处理小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    Q:请问,我写的子程序在黑窗口中无法成功运行,每次输入完命令后窗口会立即关闭,不知道是什么原因,希望能得到帮助,谢谢。

    A:这个问题可能是由于程序执行结束后窗口自动关闭导致的。你可以在程序的末尾添加代码来让程序暂停,以便你有时间查看程序执行的输出。你可以试试用以下这段代码:

    // 在代码的末尾添加以下一行,以等待用户输入,防止程序结束后黑窗口自动关闭。
    system("pause"); 
    

    此外,如果你使用的是 Visual Studio,你也可以添加以下一行:

    system("pause > null"); 
    

    该语句可以将暂停输出到 null 空设备上,避免弹出 CMD 窗口。如果你在其他 IDE 或者命令行上运行程序,你可以在命令行上执行 exe 文件,并手动输入 pause 命令来达到同样的目的。