我在阅读数组内容方面遇到了一些问题。我不确定我是否正确存储它,因为每行的结果都是' 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;
}
答案 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,因为即使文件无法打开,输出循环也需要设置它。当循环和存储输入时,循环应该测试它没有达到存储的数组的大小。