C 开关回路和外壳

C 开关回路和外壳,c,file,structure,C,File,Structure,嘿,伙计们, 所以我正在解决这个问题,我被困在开关回路中 所以发生的事情是,我可以自由选择任何情况下,只有当我编译和运行,但如果我在任何情况下,特别是1或2,我不能回到1或2 例如,假设我输入p作为1宾果,我在案例1中,但现在在案例1执行之后,如果我现在输入2,则什么都没有发生。陷入while循环,但疯狂的是,我仍然可以自由选择其他案例。除了1/2,当你退出案例1时,你正在输入另一个“n”。那么,在重新考虑开关情况之前,不要重置它。这就是问题所在 在while1块内-在开始时将赋值另设为'y'。

嘿,伙计们, 所以我正在解决这个问题,我被困在开关回路中 所以发生的事情是,我可以自由选择任何情况下,只有当我编译和运行,但如果我在任何情况下,特别是1或2,我不能回到1或2

例如,假设我输入p作为1宾果,我在案例1中,但现在在案例1执行之后,如果我现在输入2,则什么都没有发生。陷入while循环,但疯狂的是,我仍然可以自由选择其他案例。除了1/2,当你退出案例1时,你正在输入另一个“n”。那么,在重新考虑开关情况之前,不要重置它。这就是问题所在

在while1块内-在开始时将赋值另设为'y'。这将基本上使两个while循环的条件为真

#include <stdio.h>
#include <stdlib.h>
#define N 2
struct customer
{
    int accno ;
    char name[30] ;
    float balance ;
}e,m;
struct trans
{
    int accno;
    char trans_type ;
    float amount ;
}e2,m1;
int main()
{
    int k,i,p;
    char another='y',n;
    FILE *fp,*fr,*tp;
    //fp=fopen("customer.exe","rb");
    //fr=fopen("transaction.exe","wb");
    while(1){
        printf("\t\tCustomer Transactions:\n");
        printf("\t\t*********************\n\n\n");
        printf("\t1: Add customer information:\n\n");
        printf("\t2: Add transaction information:\n\n");
        printf("\t3: List customer information:\n\n");
        printf("\t4: List transaction information:\n\n");
        printf("\t5: Perform transaction:\n\n");
        printf("\t0: Exit:\n\n\n");
        printf("your choice ");
        scanf("%d",&p);
        switch (p){

        case 1:
            fp=fopen("customer.exe","wb");
            while(another=='y')
            {
                printf("\nEnter account number,Enter name,Enter balance");
                scanf("%d %s %f",&e.accno,&e.name,&e.balance);
                fwrite(&e,sizeof(e),1,fp);
                printf("Enter another y/n?");
                scanf(" %c",&another);
            }
            fclose(fp);
            break;

        case 2:
            fr=fopen("transaction.exe","wb");
            while(another=='y'){
                printf("\nEnter account number,Enter transaction type(w/d),Enter Amount");
                scanf("%d %c %f",&e2.accno,&e2.trans_type,&e2.amount);
                fwrite(&e2,sizeof(e2),1,fr);
                printf("\n\nEnter another y/n?");
                scanf(" %c",&another);
            }
            fclose(fr);
            break;

        case 3:

            fp=fopen("customer.exe","rb");
            printf("all account holders are\n\n");
            while(fread(&e,sizeof(e),1,fp)==1){
                printf("%d %s %f\n\n",e.accno,e.name,e.balance);
            }
            fclose(fp);
            break;

        case 4:
            fr=fopen("transaction.exe","rb");
            printf("\n\nEnter account number\n\n");
            scanf("%d",&m1.accno);
            while(fread(&e2,sizeof(e2),1,fr)==1){
                printf("%d %c %f\n\n",e2.accno,e2.trans_type,e2.amount);
            }
            fclose(fr);
            break;

        case 0:
            exit(1);

        }
    }
    return 0;
}

请正确缩进代码。机器编译器可以读取和编译任何东西,但对于人类来说,它需要在将文本块作为代码读取时有一点意义。提问时,文本区右侧有一个大橙色的“如何设置格式”框。还有一个完整的格式化工具条。还有一个[?]按钮提供格式化帮助。还有一个预览区,显示你的帖子发布时的样子。让你的帖子清晰明了,并证明你花了时间这样做,提高了你得到好答案的机会。请缩进你的代码!您使用了奇怪的数据文件名…@kanishktanwar.:您了解您遇到的问题吗?我在回答中提到了这一点,我觉得自己好笨,谢谢你,我被困在那里好几个小时了,这就是为什么我没有成功clearer@kanishktanwar.:很高兴知道……一切顺利。@kanishktanwar如果您使用调试器单步执行并像“另一个”一样检查var值,你可能会被困在那里几分钟。我还在学习编程,我还需要学习调试器是如何工作的
    while(1){
    ...

    another = 'y';  <---- 
    scanf("%d",&p);
    switch (p){

    case 1:
        fp=fopen("customer.exe","wb");
        while(another=='y')
        {
if( scanf("%29s",e.name) != 1){
   fprintf(stderr,"Error in input using scanf\n");
   exit(1);
}