这是我第一学期C编程课程的作业问题。
您已根据学生工作计划计划被录用。您的首要任务是编写一个C程序,以帮助该学院的一位教授为他/她的学生的期末考试评分。该考试包括20个多项选择题。每个问题都有四个可能的答案之一:A,B,C或D。程序将从文件中读取学生的答案和正确答案,并将结果打印到屏幕上,并输出文件。全班至少有15名学生。
我想做的是读取学生答案的文件,并使用函数将值存储在数组中,并将具有正确答案文件的内容存储在数组中,然后将两个数组都返回到主函数并发送给他们另一个功能比较答案。但是,在将字符串数组返回到主函数时遇到了麻烦。
这是我的代码:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
//Modules
char** readstudent()
{
FILE*s_ans;
static char arrs[20][20];
int i,j;
s_ans=fopen("trial2.txt","r");
if (s_ans == NULL)//check if file can be opened
{
printf("error student");
}
while(!feof(s_ans))
{
for(j=0;j<20;j++)
{
fscanf(s_ans,"%s",arrs[j]);
}
}
printf("ReadStudent\n");
for(i=0;i<20;i++)
{
printf("%d\t %s\n",i+1,arrs[i]);
}
return arrs;
}
char** readcorrect()
{
FILE*c_ans;
static char arrc[20][20];
int x,i;;
c_ans=fopen("CorrectAnswers.txt","r");
if (c_ans == NULL)//check if file can be opened
{
printf("error correct");
}
while(!feof(c_ans))
{
for(x=0;x<20;x++)
{
fscanf(c_ans,"%s",arrc[x]);
}
}
printf("ReadCorrect\n");
for(i=0;i<20;i++)
{
printf("%d\t %s\n",i+1,arrc[i]);
}
return arrc;
}
//Main
int main()
{
int i,j,n,x;
char **as_ans;
char **ac_ans;
as_ans=readstudent();
ac_ans=readcorrect();
printf("Main");
for(i=0;i<20;i++)
{
printf("%s",as_ans[i]);
}
return 0;
}
}
编译后,出现两次“ [警告]从不兼容的指针类型返回”。
有人可以帮助我成功地将数组返回到主函数吗?请注意,这是我第一次处理C 谢谢!
答案 0 :(得分:0)
您可以通过动态创建二维数组来做到这一点,以使其不具有功能范围,然后从功能返回,如下所示:
char** func(){
char **arrs = (char **)malloc(20 * sizeof(char *));
...
// your logic
...
return arrs;
}
使用后,您可以释放动态分配的二维数组的空间。