我有一个
input()
函数,只比较传递给它的字符串(长度为2个字符),并通过将该字符串与一些预设字符串进行比较返回相应的整数:
int input(char *ch){
if(strcmp(ch, "AZ") == 0){
return 1;
}
else if(strcmp(ch, "BY") == 0){
return 2;
}
else if(strcmp(ch, "CX") == 0){
return 3;
}
}
我有一个包含几个测试用例的输入集(每个用例以一个整数开头
N
,以及后续
N号
输入包含一些字符串。测试用例以值结尾
N号
作为
0
)以下内容:
2
AZ BY
2
AZ CX
1
AZ
3
AZ CX AZ
4
BY AZ CX BY
0
正确的输出应该是:
1 2 1 3 1 1 3 1 2 1 3 2
然后,我试图运行下面的代码来获取输出:
int main()
{
int i, j, N, array[100];
char ch[2];
while((scanf("%d", &N) == 1) && N != 0){
for(i=0; i<N; i++){
scanf("%s", ch);
array[i] = input(ch);
printf("%d ", array[i]);
}
}
return 0;
}
上面的代码有准确的输出。但当运行以下代码时,输出错误:
int main()
{
int i, j, N, array[100];
char ch[2];
while((scanf("%d", &N) == 1) && N != 0){
for(i=0; i<N; i++){
scanf("%s", ch);
array[i] = input(ch);
}
for(j=0; j<N; j++){
printf("%d ", array[j]);
}
}
return 0;
}
第二个代码段的输出是:
0 2 0 3 1 0 3 1 0 1 3 2
我甚至无法猜测这两个片段之间的根本区别是什么,以及为什么在这两种情况下输出是不同的。在第二个代码中,我使用了相同的for循环迭代,我猜数组应该仍然保留在第一个for循环中分配的值。没有其他语句在操纵
array[]
在两个for循环之间。那么,为什么
不同的输出?有人请在这个问题上帮助我。