#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("%d\n", Wrong_Question[j], j++);
}
return 0;
}
代码在 C 程序中。错误部分是如果用户输入所有答案为&#39; a&#39;,则应打印出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从第1个元素打印。它不应该有打印0因为我的条件是!= 0.数组的返回是否改变了数据?我试图在函数中打印数组,它工作正常。另外,我是 C 计划的新手。
答案 0 :(得分:1)
问题在于程序结束时的while
- 循环:
while(Wrong_Question[j] != 0)
{
printf("%d\n",Wrong_Question[j],j++);
}
您在同一声明中同时使用j
和j++
。 C标准不保证在这种情况下执行这些命令的顺序。最好将其重写为for
- 循环,如下所示:
for(j = 0; Wrong_Question[j] != 0; j++)
{
printf("%d\n", Wrong_Question[j]);
}