我真的不知道如何命名它,但在下面的代码段中,当我将一个数字传递给 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/