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


#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++);
}

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

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

最新更新