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

标签 c

我真的不知道如何命名它,但在下面的代码段中,当我将一个数字传递给 sad() 时,它应该将 tmp1 更改为那个数字,输出该数字,然后退出。然后,在 main() 中的下一次迭代中,sad() 中的 tmp2 应该输出该数字。 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]);
        }       
}

最佳答案

您所要做的就是在第二个 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;
    }
}

关于c - 如果在两个连续的 if 语句下使用传递的变量,则重复整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41551803/

相关文章:

c - 意外的 C 代码输出

c - tcp socket hungry 程序是否会干扰文件系统 I/O

c - 如何使一个变量等于C中其他变量的字符串

java - 用 ANSI C 加密,用 Java 解密

c - Flex 和 Bison,Windows 使用符号表时出错

c++ - 在C/C++程序中,如何在终端中写入粗体文本?

c - Linux 内核模块 : printk message not where I expect to be in the buffer log

c - 如何在C中输入数学方程式

c - 在任何平台上使用 ANSI C 保存和加载数据

file - 为什么使用 mmap 而不是 fread?