鱼C论坛

 找回密码
 立即注册
查看: 2341|回复: 11

为什么相同的循环逻辑(标红)在showcode最后可以用,但是openaccount不可以

[复制链接]
发表于 2020-12-22 17:40:39 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 空羊羊 于 2020-12-22 19:02 编辑
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>


void showcode(void);
void openaccount(int sequence[10][15]);


struct Account{
        char name[100];
        char id[15];
        char address[200];
        char ccode[4];
        char bcode[3];
        char Dob[10];
        int balance;
        struct tm *Doo;
        char accountnumber[11];
};


void main(void){
        char option='\0', ch='\0', in='\0';        
        int count=0;
        int sequence[10][15];
        FILE *fp;
        if((fp=fopen("Sequence.txt","r"))==NULL){
                if((fp=fopen("Sequence.txt","w"))==NULL){
                        printf("Fail to open the file!\n");
                        exit(EXIT_FAILURE);
                }
                fwrite(sequence, 150*sizeof(int), 1, fp);
        }        
        else{
                fread(sequence, 150*sizeof(int), 1, fp);
        }
        fclose(fp);
        do{        
                
                printf("1) Show city code and branch code\n");
                printf("2) Open an account\n");
                printf("3) Show account details\n");
                printf("4) Show list of accounts\n");
                printf("5) Deposit in an account\n");
                printf("6) Withdraw from an account\n");
                printf("7) Transfer money\n");
                printf("8) Transaction details\n");
                printf("9) Close an account\n");
                printf("10)Quit\n");
                printf("\n");
                printf("Option: ");
                count=0;
                option='\0', ch='\0', in='\0';
                while((in=getchar())!='\n'){
                        count++;
                        option=ch;
                        ch=in;
                }
                if((count==1)&&(ch=='0')){
                        ch='a';
                }                
                if(count>2){
                        ch='a';
                }        
                if(count==2){                
                        if((option=='1')&&(ch=='0')){
                                ch='0';
                        }
                        else{
                                ch='a';
                        }
                }
                printf("\n");
                switch(ch){
                        case '1': showcode(); break;
                        case '2': openaccount(sequence); break;
                        case '3': printf("3\n"); break;
                        case '4': printf("4\n"); break;
                        case '5': printf("5\n"); break;
                        case '6': printf("6\n");break;
                        case '7': printf("7\n");break;
                        case '8': printf("8\n");break;
                        case '9': printf("9\n");break;
                        case '0': printf("break\n");break;
                        default: printf("Unknown option!\n");
                                 printf("\n"); 
                }
        }while(ch!='0');
        exit(0);
}

void showcode(void){
        FILE *fp;
        char name1[10], name2[10], name3[10];
        char code1[4], code2[4], code3[4];
        char buffer[20], citycode[4], choice;
        char *name, *code;
        int len, rmd;
        if((fp=fopen("CityBranchCodes_Leyang_Hu_20215416.txt", "r"))==NULL){
                printf("Fail to open the file!\n");
                exit(EXIT_FAILURE);
        }
        printf("City\t\t\tcode\t\t\tCity\t\t\tcode\t\t\tCity\t\t\tcode\n");
        printf("_____________________________________________________________________________________________________________________________\n");        
        while(fgets(buffer, 20, fp)!=NULL){
                len=strlen(buffer);        
                buffer[len-1]='\0';
                code=strtok(buffer, "\t");
                name=strtok(NULL, "\t");
                if(strlen(code)==3){
                        rmd=(atoi(code))%3;
                        switch(rmd){
                                case 1:
                                        strcpy(name1, name);
                                        strcpy(code1, code);
                                        break;
                                case 2:
                                        strcpy(name2, name);
                                        strcpy(code2, code);
                                        break;
                                case 0: strcpy(name3, name);
                                        strcpy(code3, code);
                                        printf("%-10s\t\t%-10s\t\t%-10s\t\t%-10s\t\t%-10s\t\t%-10s\n", name1, code1, name2, code2, name3, code3);
                                        break;
                        }
                }
        }
        printf("%-10s\t\t%-10s\n", name1, code1);
        printf("\n");
        
        fseek(fp, 0, SEEK_SET);
        printf("Enter the city code: ");        
        scanf("%s", citycode);
        getchar();
        printf("\n");
        if((fp=fopen("CityBranchCodes_Leyang_Hu_20215416.txt", "r"))==NULL){
                printf("Fail to open the file!\n");
                exit(EXIT_FAILURE);
        }
        while(fgets(buffer, 20, fp)!=NULL){
                len=strlen(buffer);        
                buffer[len-1]='\0';
                code=strtok(buffer, "\t");
                name=strtok(NULL, "\t");                
                if((strcmp(code, citycode))==0){
                        break;
                }
        }
        printf("Branch name\t\tcode\t\t\tBranch name\t\tcode\t\t\tBranch name\t\tcode\n");
        printf("_____________________________________________________________________________________________________________________________\n");        
        while(fgets(buffer, 20, fp)!=NULL){                        
                len=strlen(buffer);        
                buffer[len-1]='\0';
                code=strtok(buffer, "\t");
                name=strtok(NULL, "\t");
                if(strlen(code)==3){
                        break;
                }
                rmd=(atoi(code))%3;
                switch(rmd){
                        case 1:
                                strcpy(name1, name);
                                strcpy(code1, code);
                                break;
                        case 2:
                                strcpy(name2, name);
                                strcpy(code2, code);
                                break;
                        case 0: strcpy(name3, name);
                                strcpy(code3, code);
                                printf("%-10s\t\t%-10s\t\t%-10s\t\t%-10s\t\t%-10s\t\t%-10s\n", name1, code1, name2, code2, name3, code3);
                                break;
                }
        }
        switch(rmd){
                case 1:
                        printf("%-10s\t\t%-10s\n", name1, code1);
                        break;                        
                case 2:
                        printf("%-10s\t\t%-10s\t\t%-10s\t\t%-10s\n", name1, code1, name2, code2);
                        break;
                case 0:
                        break;
        }
        fclose(fp);
        printf("\n");
        printf("Do you want to see more city and branch codes (Y/N): ");
        scanf("%c", &choice);
        getchar();
        if(choice=='Y'){
                                
                showcode();
        }
        printf("\n");
}
                        

void openaccount(int sequence[10][15]){
        struct Account *account=(struct Account*)malloc(sizeof(struct Account));        
        int blc,i,j,number,len; 
        char ch, orig[5], seq[5];
        FILE *fp, *ptr;
        time_t t;
        printf("Enter the name of the account holder: ");
        while((ch=getchar())!='\n'){
                account->name[i]=ch;
                i++;                
        }
        printf("Enter the Id number of the account holder: ");
        scanf("%s", account->id);
        getchar();        
        printf("Enter the address of the account holder: ");
        i=0;        
        while((ch=getchar())!='\n'){
                account->address[i]=ch;
                i++;                
        }
        printf("Enter city code: ");
        scanf("%s", account->ccode);
        getchar();
        printf("Enter branch code: ");
        scanf("%s", account->bcode);
        getchar();
        printf("Enter the Dob of the account holder: ");
        scanf("%s", account->Dob);
        getchar();
        while(blc<1000){
                printf("Enter the initial balance of the account (not less that 1000 RMB): ");
                scanf("%d", &blc);
                if(blc<1000){
                        printf("Initial deposit can't be less than 1000 RMB.\n");
                }
        }
        account->balance=blc;
        time(&t);
        account->Doo=localtime(&t);
        if((fp=fopen("Account.txt", "a"))==NULL){
                printf("Fail to open the file!\n");
                exit(EXIT_FAILURE);
        }
        i=atoi(account->ccode);
        j=atoi(account->bcode);        
        number=(sequence[i][j])+1;
        sequence[i][j]+=1;
        if((ptr=fopen("Sequence.txt", "w"))==NULL){
                printf("Fail to open the file!\n");
                exit(EXIT_FAILURE);
        }
        fwrite(sequence, 150*sizeof(int), 1, ptr);
        fclose(ptr);
        sprintf(orig, "%d", number);
        len=strlen(orig);
        i=0;
        for(j=0;j<5;j++){
                if(j>=(5-len)){
                        seq[j]=orig[i];
                        i++;
                }
                else{
                        seq[j]='0';
                }
        }
        strcpy(account->accountnumber, account->ccode);
        strcat(account->accountnumber, account->bcode);
        strcat(account->accountnumber, seq);
        account->accountnumber[10]='\0';
        printf("The account number is: %s\n", account->accountnumber);
        fwrite(account, sizeof(struct Account), 1, fp);
        free(account);
        fclose(fp);
        printf("\n");
        printf("Do you want to open more accounts?(Y/N): ");
        scanf("%c", &ch);
        getchar();
        if(ch=='Y'){
                printf("\n");                
                openaccount(sequence);
        }
        printf("\n");
}




就是我每次在每个功能进行一次后在结尾询问是否要继续后, showcode的可以正确执行,但是openaccount的就不可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-23 10:40:42 | 显示全部楼层
解决了,就是直接在主程序菜单的switch的case 2里写一个do...while来控制是否进行循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-22 17:41:28 | 显示全部楼层
真的很疑惑,求助各位大佬!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-22 18:04:28 | 显示全部楼层

回帖奖励 +1 鱼币

本帖最后由 jackz007 于 2020-12-22 18:06 编辑

     楼主,把你的帖子编辑一下,一定要把代码贴进代码框,要不然,你贴出来的代码会缺很多东西,看看你的代码,是不是在某个位置起变成斜体了,因为你的部分代码被作为字体及其它版面描述符而被吸收掉了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-22 18:12:30 | 显示全部楼层
jackz007 发表于 2020-12-22 18:04
楼主,把你的帖子编辑一下,一定要把代码贴进代码框,要不然,你贴出来的代码会缺很多东西,看看你的 ...

是因为我设置了红色才会这样的吗?之前好像都没事的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-22 18:16:14 | 显示全部楼层
空羊羊 发表于 2020-12-22 18:12
是因为我设置了红色才会这样的吗?之前好像都没事的

    一定有事的,不信你发一下
x[i][j]
    看一下效果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-22 18:19:19 | 显示全部楼层
x[i][j]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-22 18:20:40 | 显示全部楼层
jackz007 发表于 2020-12-22 18:04
楼主,把你的帖子编辑一下,一定要把代码贴进代码框,要不然,你贴出来的代码会缺很多东西,看看你的 ...

代码框不是那个发帖的时候下面那个大框吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-22 18:27:16 | 显示全部楼层
空羊羊 发表于 2020-12-22 18:20
代码框不是那个发帖的时候下面那个大框吗

      不是的,是这个框子的上边框有一个标识有 "<>" 的按钮,点一下就会出现代码框。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-22 19:00:49 | 显示全部楼层
jackz007 发表于 2020-12-22 18:27
不是的,是这个框子的上边框有一个标识有 "" 的按钮,点一下就会出现代码框。

okok
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 10:07:19 | 显示全部楼层

回帖奖励 +1 鱼币

不懂帮顶·
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 11:52:17 | 显示全部楼层

回帖奖励 +1 鱼币

解决了就把帖子改成已解决吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 08:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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