3

我需要一个从文件中读取成绩(整数)并返回存储它们的动态分配数组的函数。

这是我尝试过的:

int *readGrades() {
int *grades;
int x;
scanf("%d", &x);
grades = malloc(x * sizeof(int));
return 0;
}

但是,当我运行代码时,我什么也没得到。成绩存储在名为的文件中1.in

29
6 3 8 6 7 4 8 9 2 10 4 9 5 7 4 8 6 7 2 10 4 1 8 3 6 3 6 9 4

我使用以下方法运行我的程序:./a.out < 1.in

谁能告诉我我做错了什么?

4

2 回答 2

5

问题:以下代码:

int *readGrades() {
    int *grades;
    int x;
    scanf("%d", &x);
    grades = malloc(x * sizeof(int));
    return 0;
}

从标准输入中读取 1 ,然后它分配一个sint数组,它在使用时对调用者的指针进行零初始化:intreturn0

int* grades = readGrades();

解决方案:该功能除了读取成绩计数外,还应读取成绩。数组应该在读取之前初始化,并且成绩的实际读取应该在一个循环中完成,这将初始化数组的元素。最后,应该返回指向第一个元素的指针:

int *readGrades(int count) {
    int *grades = malloc(count * sizeof(int));
    for (i = 0; i < count; ++i) {
        scanf("%d", &grades[i]);
    }
    return grades;                // <-- equivalent to return &grades[0];
}
...
int count;
scanf("%d", &count);              // <-- so that caller knows the count of grades
int *grades = readGrades(count);  
于 2013-09-30T11:40:17.800 回答
3

希望您正在寻找以下程序。这会读取您的 Grades.txt,创建内存并最终释放。我已经测试了以下程序,它工作正常。

#include "stdio.h"


int main(int argc, char *argv[])
{
  FILE *fp;
  int temp;
  int *grades = NULL;
  int count = 1;
  int index;

  fp = fopen("grades.txt","rb+");

  while( fscanf(fp,"%d",&temp) != EOF )

  {


    if( grades == NULL )

     {

       grades = malloc(sizeof(temp));
       *grades = temp;

       printf("The grade is %d\r\n",temp);
     }

    else
    {
       printf("The grade is realloc %d\r\n",temp);
       count++;
       grades = realloc(grades,sizeof(grades)*count);
       index = count -1;
       *(grades+index) = temp;
       //printf("the index is %d\r\n",index);

    }  

  }   


   /** lets print the data now **/

   temp = 0;

    while( index >= 0 )
    {

        printf("the read value is %d\r\n",*(grades+temp));
        index--;
        temp ++;

    }

    fclose(fp);

    free(grades);
    grades = NULL;


}
于 2013-09-30T12:28:05.237 回答