返回int数组,然后用while循环打印它,它显示不准确的数据

时间:2017-01-31 17:18:34

标签: c arrays

#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 计划的新手。

1 个答案:

答案 0 :(得分:1)

问题在于程序结束时的while - 循环:

while(Wrong_Question[j] != 0)
{
    printf("%d\n",Wrong_Question[j],j++);
}

您在同一声明中同时使用jj++。 C标准不保证在这种情况下执行这些命令的顺序。最好将其重写为for - 循环,如下所示:

for(j = 0; Wrong_Question[j] != 0; j++)
{
    printf("%d\n", Wrong_Question[j]);
}