在if else循环之前正确打印变量,但在if else循环中不保留该值

时间:2015-03-13 06:09:10

标签: c if-statement scanf

我编写了一个程序,它从文本文件中读取帐户值,然后将这些值分配给每个帐户的变量。完成此操作后,从同一文本文件中读取,对每个帐户值执行的操作将以“Account#Actiontype ActionModifier”格式标识。当我插入printfs进行检查时,正在扫描所有正确的值并存储正确的值,但是在打印正确的值之后,值立即通过else if循环。当由于某种原因执行此操作时,无论如何将值读取为1并且正在执行else if循环中的操作,就好像它等于1一样。

loopState = 1;
while(loopState != 0)

{

for(i = 1;i < 100 ;i++)
    {

    if(i < 6)// This executes fine
    {
        fscanf(bankfile,"%f",&accValue);
    switch(i)
        {
            case 1:
                acc1 = accValue;
                break;
            case 2:
                acc2 = accValue;
                break;
            case 3:
                acc3 = accValue;
                break;
            case 4:
                acc4 = accValue;
                break;
            case 5:
                acc5 = accValue;
                printf("Done module one\n");
                break;

        }
    }
    else // scan for the the first value, than the second, then the third
    {
            fscanf(bankfile,"%d",&accNum);

            if(accNum != 0)
            {
                fscanf(bankfile,"%c",&accAction);

                if(accAction == 'W' || accAction == 'D')
                {
                    fscanf(bankfile,"%f",&actValue);
                    printf("%d %c %.2f\n",accNum,accAction,actValue);//this will be correct
                    printf("%d\n",accNum); //this will print say "2"

                    if(accNum = 1)//but this if statement will be run
                    {//thus printing the below printf
                        printf("If accNum = 1 this will print\n");
                        switch(accAction)
                        {
                            case 'W':
                                final1 = withdrawl(acc1,actValue);
                                break;
                            case 'D':
                                final1 = deposit(acc1,actValue);
                                break;
                         }
                     }

                     else if(accNum = 2)
                     {
                        switch(accAction)
                        {
                            case 'W':
                                final2 = withdrawl(acc2,actValue);
                                break;
                            case 'D':
                                final2 = deposit(acc2,actValue);
                                break;
                         }
                     }
                     else if(accNum = 3)
                     {
                        switch(accAction)
                        {
                            case 'W':
                                final3 = withdrawl(acc3,actValue);
                                break;
                            case 'D':
                                final3 = deposit(acc3,actValue);
                                break;
                         }
                     }
                     else if(accNum = 4)
                     {
                        switch(accAction)
                        {
                            case 'W':
                                final4 = withdrawl(acc4,actValue);
                                break;
                            case 'D':
                                final4 = deposit(acc4,actValue);
                                break;
                         }
                     }
                     else if(accNum = 5)
                     {
                        switch(accAction)
                        {
                            case 'W':
                                final5 = withdrawl(acc5,actValue);
                                break;
                            case 'D':
                                final5 = deposit(acc5,actValue);
                                break;
                         }
                     }
                }
                else if(accAction == 'B' || accAction == 'U')
                {   
                printf("%d %c\n",accNum,accAction);//this will be correct
                printf("%d\n",accNum);//this will print say "4"
                    if(accNum = 1)//but this if statement will be run
                    {//thus printing this printf below
                        printf("If accNum = 1 this will print\n");
                        switch(accAction)
                        {
                            case 'B':
                                final1 = balance(acc1);
                                break;
                            case 'U':
                                final1 = update(acc1);
                                break;
                         }
                     }

                     else if(accNum = 2)
                     {
                        switch(accAction)
                        {
                            case 'B':
                                final2 = balance(acc2);
                                break;
                            case 'U':
                                final2 = update(acc2);
                                break;
                         }
                     }
                     else if(accNum = 3)
                     {
                        switch(accAction)
                        {
                            case 'B':
                                final3 = balance(acc3);
                                break;
                            case 'U':
                                final3 = update(acc3);
                                break;
                         }
                     }
                     else if(accNum = 4)
                     {
                        switch(accAction)
                        {
                            case 'B':
                                final4 = balance(acc4);
                                break;
                            case 'U':
                                final4 = update(acc4);
                                break;
                         }
                     }
                     else if(accNum = 5)
                     {
                        switch(accAction)
                        {
                            case 'B':
                                final5 = withdrawl(acc5,actValue);
                                break;
                            case 'U':
                                final5 = deposit(acc5,actValue);
                                break;
                         }
                     }

                }
            }
            else
            loopState = 0;
    }
}
 }
    printf("Exited Loop");
}

根据我的理解,如果仅将其视为正确值之前的行,我无法看到值被改变的位置

1 个答案:

答案 0 :(得分:2)

您的条件陈述正在进行分配。

else if (accNum = 3)

应该是

else if (accNum == 3)