我有两个列文件,如下所示:
9 9
1 2
3 2
我尝试使用fscanf
从中读取并将int * buff
作为格式。
FILE *fp = fopen(argv[1], "r");
int num_rows = 0;
int num_columns = 2;
int i = 0;
int j = 0;
int *buff = calloc(10, num_columns * sizeof(int));
我遇到的问题是我不知道该为fscanf(fp, %d %d\n, idk1, idk2)
我想将它们放在buff
内,但我不知道在哪些地方。
for(i = 0; i < num_columns; i++) {
for(j = 0; j <= num_rows; j++){
int line = fscanf(fp, "%d %d\n", &buff[num_columns], &buff[num_rows]);
if(line == EOF){
break;
}
if(num_rows % 10 == 0){
num_rows += 10;
buff = realloc(buff, num_rows * num_columns * sizeof(int));
}
}
}
我正在读取我认为相同位置的值,但我看不到相同的输出。
for(i = 0; i < num_rows; i++){
for(j = 0; j < num_columns; j++){
printf("%d", buff[i * num_columns + j]);
}
printf("\n");
}
我将此视为输出:
92
20
00
00
00
...
...
但它应该只是将输入文件匹配为:]
9 9
1 2
3 2
我应该在fscanf
内放置什么作为稍后在memarray[i * num_columns + j];
内打印相同数据的位置?
答案 0 :(得分:2)
我认为你要存储的是每一行。在您的代码中fscanf(fp, "%d %d\n", &buff[num_columns], &buff[num_rows])
是错误的。您应该使用索引i
和j
的某个表达式,而不是使用num_rows
和num_columns
。基本上,您在buff[num_columns]
和buff[num_rows]
处写的价值过高。
您希望逐行读取文件,然后只能使用单循环执行此操作。循环for(j = 0; j <= num_rows; j++)
并尝试使用fscanf(fp, "%d %d\n", &buff[ num_rows*num_columns ], &buff[ num_rows * num_columns + 1 ] )
存储。
此外,我不知道您使用num_rows += 10;
的原因,它可能会扰乱您的循环索引。如果您想为10个新行分配内存,只需在num_rows*10
中提供num_rows
而不是realloc(buff, num_rows * num_columns * sizeof(int))
。