鱼C论坛

 找回密码
 立即注册
查看: 652|回复: 1

[已解决]C语言家庭收支软件

[复制链接]
发表于 2020-8-15 11:34:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大家好,请大家帮帮忙!
就是这个代码生成之后输入4退出的时候输入y和n都提示输入不正确,小白在此请教各位大神
麻烦帮忙解答,谢谢!!!
#include<stdio.h>
#include<string.h>

        struct MyFamilyAccount{
                int flag;
                char details[3000];
                double balance;
        };


        char key = ' ';
        int loop=1;
        char note[20]="";
        char temp[100]="";
        double money=0.0;
        double choice=' ';


        void pay(struct MyFamilyAccount*myFamilyAccount){
                                printf("本次支出金额:");
                                scanf("%lf",&money);
                                getchar();
                                if(money>(*myFamilyAccount).balance){
                                        printf("\n余额不足:");
                                        return;
                                }
                                printf("本次支出说明:");
                                scanf("%s",&note);
                                getchar();
                                (*myFamilyAccount).balance -= money;
                                sprintf(temp,"\n\n支出\t%.2f\t\t%.2f\t\t\t%s",money,        (*myFamilyAccount).balance,note);
                                strcat((*myFamilyAccount).details,temp);
                                (*myFamilyAccount).flag=1;
        }
        void income(struct MyFamilyAccount*myFamilyAccount){
                                printf("本次收入金额:");
                                scanf("%lf",&money);
                                getchar();
                                (*myFamilyAccount).balance += money;
                                printf("本次收入说明:");
                                scanf("%s",note);
                                getchar();
                                sprintf(temp,"\n\n收入\t%.2f\t\t%.2f\t\t\t%s",money,(*myFamilyAccount).balance,note);
                                strcat((*myFamilyAccount).details,temp);
                                (*myFamilyAccount).flag=1;
        }
        void showDetails(struct MyFamilyAccount*myFamilyAccount){
                if((*myFamilyAccount).flag){
                                printf("%s",(*myFamilyAccount).details);
                                }else{
                                        printf("没有任何收支明细,来一笔吧!");
                                }
        }

        void myExit() {
        printf("\n你确定要退出吗? y/n");
        do {
                scanf("%c", &choice);
                getchar();
                if(choice == 'y'||choice == 'n') {
                        break;
                }
                printf("\n 你的输入有误,请重新输入 y/n");
        }while(1);
                if ( choice == 'y') {
                        loop = 0;}
}

        void mainMenu(struct MyFamilyAccount*myFamilyAccount){

                do{
                        printf("\n-----------------家庭收支记账软件-----------------");
                        printf("\n                1 收支明细");
                        printf("\n                2 登记收入");
                        printf("\n                3 登记收入");
                        printf("\n                4 退        出");
                        printf("\n请选择1--4:");
                        scanf("%c",&key);
                        getchar();
                        switch(key){
                        case'1':
                                showDetails(myFamilyAccount);
                                break;
                        case'2':
                                income(myFamilyAccount);
                                break;
                        case'3':
                                pay(myFamilyAccount);
                                break;
                        case'4':
                                myExit();
                        }
        }while(loop);

        printf("你退出了家庭收支软件");
        getchar();
}

void main(){
        struct MyFamilyAccount myFamilyAccount;
        myFamilyAccount.flag = 0;
        myFamilyAccount.balance = 1000.0;
        memset(myFamilyAccount.details,3000,0);
        strcpy(myFamilyAccount.details,"-----------------当前收支明细-----------------\n收支\t收支金额\t账户金额\t说  明");
        mainMenu(&myFamilyAccount);
        getchar();
}
最佳答案
2020-8-15 11:44:08
因为你的变量choice的类型定义错了,你定义的是double类型,而后面使用的时候一直当做char使用的。
应该定义成char
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-15 11:44:08 | 显示全部楼层    本楼为最佳答案   
因为你的变量choice的类型定义错了,你定义的是double类型,而后面使用的时候一直当做char使用的。
应该定义成char
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 04:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表