如果传递的变量在两个连续的if语句下使用,则重复整数

时间:2017-01-09 15:53:58

标签: c

我真的不知道如何标题,但在下面的代码段中,当我将一个数字传递给sad()时,它应该将tmp1更改为该数字,输出数字,然后出口。然后在main()的下一次迭代中,tmp2中的sad()应该输出该数字。 tmp3将等于10 * tmp1 + tmp2,这会将两个数字合并在一起。上面输出的两个数字都很好,但是当它在第二个if语句之后到达时,它会重复这些数字。例如,如果我制作了tmp3 = tmp1,则会重复3六次。你怎么不让它重复?

#include <stdio.h>
#include <string.h>
char tmp1 = 'a';
char tmp2 = 'a';
char tmp3 = 'a';
char sad(char a)
{       
        //int same as char, char not same as int
        //tmp3 eventually equals tmp1   
        if (tmp1 == 'a') //if number skip
        {
                tmp1 = a;
                printf("tmp1 %d\n", tmp1);
                return 0;
        }
        if (tmp2 == 'a') //if number skip
        {
                tmp2 = a;
                printf("tmp2 %d\n", tmp2);
        }
        tmp3 = 10 * tmp1 + tmp2;
        printf("%d", tmp1); 
        return 0;


}
int main()
{
        int tmpnum[8] = {3, 2, 123, 342, 23, 32, 0, 12};
        int i;  
        for (i = 0; i < sizeof(tmpnum) / sizeof(tmpnum[0]); i++)
        {
                sad(tmpnum[i]);
        }       
}

2 个答案:

答案 0 :(得分:0)

您需要做的就是在第二个if中返回并重置后续段落中的初始值:

char sad(char a)
{       
    static char tmp1 = 'a';
    static char tmp2 = 'a';
    static char tmp3 = 'a';

    //int same as char, char not same as int
    //tmp3 eventually equals tmp1   
    if (tmp1 == 'a') //if number skip
    {
        tmp1 = a;
        printf("tmp1 %d\n", tmp1);
        return 0;
    }
    if (tmp2 == 'a') //if number skip
    {
        tmp2 = a;
        printf("tmp2 %d\n", tmp2);
        return 0;
    }
    tmp3 = 10 * tmp1 + tmp2;
    printf("%d", tmp3); // this should be tmp3 not tmp1, right?
    tmp1 = 'a';
    tmp2 = 'a';
    return 0;
}

使用与tmp变量分开的状态变量,可以使逻辑更明显。

char sad(char a)
{       
    static char tmp1 = 'a';
    static char tmp2 = 'a';
    char tmp3;
    static state=0;

    switch(state)
    {
    case 0:
        tmp1 = a;
        printf("tmp1 %d\n", tmp1);
        state = 1;
        return 0;

    case 1:
        tmp2 = a;
        printf("tmp2 %d\n", tmp2);
        state = 2;
        return 0;

    case 2:
        tmp3 = 10 * tmp1 + tmp2;
        printf("%d", tmp3); // this should be tmp3 not tmp1, right?
        state = 0;
        return 0;
    }
}

答案 1 :(得分:0)

我没有答案,但我有一个解决方案。我可以在主要打印tmp3而不是悲伤。我认为这是因为调用所有变量的for循环正在到达那一点,只是执行tmp3的打印。