#include<stdio.h>
#define SIZE 15
int * Check_Wrong_Question(char User_Answer[SIZE],char MCQ_Answer[SIZE])
{
int i, j;
i = 0;
j = 0;
static int Wrong_Question[SIZE];
for(i = 0; i < SIZE; i++)
{
if(User_Answer[i] != MCQ_Answer[i])
{
Wrong_Question[j] = i+1;
j++;
}
}
return Wrong_Question;
}
int main()
{
char MCQ_Answer[SIZE] = {'d','b','a','c','b','c','a','b','d','c','d','b','d','a','a'};
char User_Answer[SIZE];
int i,j;
int *Wrong_Question;
i = 0;
j = 0;
for(i = 0; i < SIZE; i++)
{
printf("Q%d)", i+1);
scanf("%c", &User_Answer[i]);
}
Wrong_Question = Check_Wrong_Question(User_Answer,MCQ_Answer)
while(Wrong_Question[j] != 0)
{
printf("%dn", Wrong_Question[j], j++);
}
return 0;
}
代码在C程序中。错误部分是,如果用户输入所有答案为"a",则应打印出1,2,4,5,6,8,9,10,11,12,13。但它显示 2,4,5,6,7,8,9,10,11,12,13,0。它从数组的第 2 个元素打印,尽管我声明 j=0 从第一个元素打印。它不应该打印 0,因为我的条件是 != 0。数组从其函数返回是否改变了数据?我尝试在函数中打印数组,它工作正常。另外,我是C程序的新手。
问题出在程序末尾的 while
循环上:
while(Wrong_Question[j] != 0)
{
printf("%dn",Wrong_Question[j],j++);
}
您在同一语句中同时使用 j
和j++
。在这种情况下,C 标准不保证以何种顺序执行这些命令。最好将其重写为 for
循环,如下所示:
for(j = 0; Wrong_Question[j] != 0; j++)
{
printf("%dn", Wrong_Question[j]);
}