将文件内容逐行存储到数组中,然后打印数组内容

时间:2014-12-04 04:21:05

标签: c arrays type-conversion fgets

我在阅读数组内容方面遇到了一些问题。我不确定我是否正确存储它,因为每行的结果都是' 1304056712'。

#include <stdio.h>
#include <stdlib.h>

#define INPUT "Input1.dat"

int main(int argc, char **argv) {
 int data_index, char_index;
 int file_data[1000];

  FILE *file;
  int line[5];
  file = fopen(INPUT, "r");

  if(file) {
   data_index = 0;

   while(fgets(line, sizeof line, file) != NULL) {
    //printf("%s", line); ////// the line seems to be ok here
    file_data[data_index++] = line;
   }

   fclose(file);
  }

  int j;
  for(j = 0; j < data_index; j++) {
   printf("%i\n", file_data[j]); // when i display data here, i get '1304056712'
  }

 return 0;
}

3 个答案:

答案 0 :(得分:1)

我认为你需要说出像

这样的话

file_data [data_index ++] = atoi(line);

答案 1 :(得分:1)

从结果中我假设该文件是纯文本文件。

你不能简单地将文件中的行(一个字符串,一个字符数组)读入一个整数数组,这是行不通的。使用指针(就像将line传递给fgets()一样)来写入数据时,不会进行任何转换。相反,您应该将该行读入一个字符数组,然后使用sscanf()atoi()或您选择的其他函数将其转换为整数。

答案 2 :(得分:1)

fgets读取换行符已终止的字符串。如果您正在阅读二进制数据,则需要fread。如果你正在阅读文本,你应该将line声明为一个足够大的char数组,用于文件中最长的行。

因为file_data是char数组,所以file_data [data_index]是单个字符。它被分配了一个指针(int line [5] buffer的基址)。如果读取二进制数据,file_data应该是一个整数数组。如果读取字符串,它应该是一个字符串数组,即char指针,如char * file_data[1000]

您还需要在if (file) ...块之外初始化data_index = 0,因为即使文件无法打开,输出循环也需要设置它。当循环和存储输入时,循环应该测试它没有达到存储的数组的大小。