gpt4 book ai didi

C-读取txt并写入数组

转载 作者:行者123 更新时间:2023-11-30 19:22:05 26 4
gpt4 key购买 nike

我之前也问过类似的问题,链接在这里。 C-Read txt into txt file

刚刚发现代码有一点问题,数组的第一列被赋予了“size”的值。

我想在这里发布一篇新文章,希望有人能提供帮助。

<小时/>

我在目录/user/test/key.txt 中有一个 txt 文档。 txt中的内容是这样的:

10 21 34 45 29 38 28
(blank line)
29 47 28 32 31 29 20 12 24
(blank line)

我想从txt中读取这些数字并写入一个两行数组。数组的长度可能会根据 txt 中较长的行而变化。而数组中可能会变成这样:

10 21 34 45 29 38 28 0 0
29 47 28 32 31 29 20 12 24

谢谢!

最佳答案

这就是您明确接受的答案的作用,这是一个非常好的主意,因为您必须以某种方式确定特定行包含多少列。另一个方法是让每行中的特殊值确定结束(如字符串中的 '\0')。要实现这样的效果,您可以按如下方式更改代码:

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

int getColCount(FILE *fin){
long fpos = ftell(fin);
int count = 0;
char buff[BUFSIZ];
while(fgets(buff, sizeof(buff), fin)){
char *p;
for(p=strtok(buff, " \t\n");p;p=strtok(NULL, " \t\n"))
++count;
if(count)break;
}
fseek(fin, fpos, SEEK_SET);
return count;
}

int main(void){
FILE *fp;
int *key1[2];

if((fp = fopen("/Users/doc/test.txt", "rt")) == NULL){
printf("\nCannot open file");
exit(1);
}

for(int i = 0; i < 2; ++i){
int size = getColCount(fp);
// size+1 is still necessary, the additional element is now needed for the delimiting value instead of the number of elements
key1[i] = malloc((size+1)*sizeof(int));
/* CHANGE: don't store size in col 0
if(key1[i]){
key1[i][0] = size;//length store top of row
} else {
fprintf(stderr, "It was not possible to secure the memory.\n");
exit(2);
}
now we just do: */
if(!key1[i]){
fprintf(stderr, "It was not possible to secure the memory.\n");
exit(2);
}
/* CHANGE: we start with index 0 */
//for(int j = 1; j <= size ;++j){
for(int j = 0; j < size ;++j){
fscanf(fp, "%d", &key1[i][j]);
}
/* CHANGE: we add a final value to determine the end of the row */
key[i][size] = -1; // choose a value that cannot occur in your data
}
fclose(fp);
{//check print and dealocate
for(int i = 0; i < 2 ; ++i){
for(int j = 1; j <= key1[i][0]; ++j)
printf("%d ", key1[i][j]);
printf("\n");
free(key1[i]);
}
}
return 0;
}

关于C-读取txt并写入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18386268/

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