我真的不知道如何标题,但在下面的代码段中,当我将一个数字传递给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]);
}
}
答案 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的打印。