gpt4 book ai didi

c - 在 C 中读取两列文件

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:00 25 4
gpt4 key购买 nike

我有这样的两列文件:

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]; 中打印相同数据的位置?

最佳答案

我认为您要存储的是每一行。在你的代码中 fscanf(fp, "%d %d\n", &buff[num_columns], &buff[num_rows])是错的。您应该使用一些索引表达式 ij而不是使用 num_rowsnum_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_rowsrealloc(buff, num_rows * num_columns * sizeof(int)) .

关于c - 在 C 中读取两列文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49620422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com