C 在两个连续if语句下面使用的重复整数if传递变量
我真的不知道如何命名,但在下面的代码段中,当我将一个数字传递到C 在两个连续if语句下面使用的重复整数if传递变量,c,C,我真的不知道如何命名,但在下面的代码段中,当我将一个数字传递到sad()中时,它应该将tmp1更改为该数字,输出该数字,然后退出。然后在main()中的下一次迭代中,sad()中的tmp2应该输出该数字tmp3将等于10*tmp1+tmp2,这将两个数字合并在一起。上面输出的两个数字都很好,但是当它到达第二个if语句之后,它会重复这些数字。例如,如果我使tmp3=tmp1,它将重复3六次。你如何使它不再重复 #include <stdio.h> #include <string
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]);
}
}
#包括
#包括
char tmp1='a';
char tmp2='a';
字符tmp3='a';
查萨德(查a)
{
//int与char相同,char与int不相同
//tmp3最终等于tmp1
if(tmp1='a')//如果数字跳过
{
tmp1=a;
printf(“tmp1%d\n”,tmp1);
返回0;
}
if(tmp2='a')//如果数字跳过
{
tmp2=a;
printf(“tmp2%d\n”,tmp2);
}
tmp3=10*tmp1+tmp2;
printf(“%d”,tmp1);
返回0;
}
int main()
{
int tmpnum[8]={3,2,123,342,23,32,0,12};
int i;
对于(i=0;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;
}
}
我没有答案,但我有一个解决办法。我可以用main而不是sad打印tmp3。我认为这是因为调用所有变量的for循环正在到达该点,并且只执行tmp3的打印。不要使用全局变量,而局部(自动)变量也可以。使用调试器查看代码并查看值。它们不会这样做,因为每次调用函数时,值都将等于“a”,我不能这样做。因为我需要它们保留数字,直到另行通知。我不确定预期的输出应该是什么。在对
sad()
的前两次调用之后,tmp1
和tmp2
被设置为非'a'
,因此如果跳过前两次,则不会重置tmp1
和tmp2
,因此tmp3
将始终获得相同的值,并且您正在此处打印tmp1
的值。报告的输出与预期一致。