gpt4 book ai didi

C、从txt文件读入struct

转载 作者:太空宇宙 更新时间:2023-11-04 03:17:46 24 4
gpt4 key购买 nike

我是 C 编程的新手。我需要在第一行之后从文件中读取数据,我需要将这些内容放入结构中。我尝试了一些但没有用。它读取第二行之后的内容,但不读取字符串。我该如何解决这个问题?

这是我的代码,

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

typedef struct
{
char *word;
char *clue;
int x;
int y;
char direction;
int f;
} Word_t;

Word_t* loadTextFile(FILE* myFile, int wNumbers){
char line[100];
Word_t *temp;
temp = malloc(wNumbers*sizeof(Word_t));
int i = 0;
int j= 0;
int status;

while (status != EOF) {
if (fgets(line, sizeof (line), myFile)) {
status = fscanf(myFile,"%c %d %d %s %s", &temp[i].direction, &temp[i].x, &temp[i].y, temp[i].word, temp[i].clue);
i++;
}
}
}

int main(){
Word_t *elements;
char filename[256];
FILE * fp;
int rowCount, colCount, wordsCount;

printf("Enter the name of text file:");
scanf("%s", filename);
fp = fopen(filename,"r");

if(!fp)
{
fputs("fopen failed! Exiting...\n", stderr);
exit(-1);
}
int status;
status = fscanf(fp, "%d %d %d ", &rowCount, &colCount, &wordsCount);
printf("Game is %d rows x %d cols with %d words\n", rowCount, colCount, wordsCount);
elements = malloc(wordsCount*sizeof(Word_t));

loadTextFile(fp, wordsCount);
}

这是示例文件,

   5 5 7
H 1 1 MILK White liquid produced by the mammals
H 2 1 IN Used to indicate inclusion within space, a place, or limits
H 3 3 BUS A road vehicle designed to carry many passengers
H 5 3 DAN The name of a famous author whose surname is Brown
V 1 1 MIND A set of cognitive faculties, e.g. consciousness, perception, etc.
V 3 3 BAD Opposite of good
V 2 5 ISBN International Standard Book Number

最佳答案

您的变量 status 未初始化,因此您在 while (status != EOF) 的第一次迭代中使用了未初始化的变量。我建议将 status 初始化为 0。

当您调用 fgets 时,您正在使用文件的一行。消费后,您将从下一行开始阅读。不要在 fgets 之后调用 fscanf,而是尝试使用 sscanf。我还将最后一个转换说明符从 %s 更改为 %[^\n]s 以便它读取直到到达换行符。这是因为您的 clue 字符串中有空格。

if (fgets(line, sizeof (line), myFile)) {
status = sscanf(line,"%c %d %d %s %[^\n]s", &temp[i].direction, &temp[i].x, &temp[i].y, temp[i].word, temp[i].clue);
i++;
}

status 可用于告诉您有多少输入项被 sscanf 成功读取

sscanf%s 参数从输入中读取一个字符串,但是您的值 temp[i].wordtemp [i].clue 和未初始化且不指向分配的内存。您需要先使用 malloc 为这些指针分配内存。

您的函数 loadTextFile 没有返回任何内容。您是否忘记返回 temp

此外,您可能应该返回数组中有效项目的数量,以便调用者知道有多少项目可用。这可以通过更改您的方法签名以接受指向 wNumbers 的指针而不是值,然后将 *wNumbers 重置为填充的数组元素的数量来实现。您还应该检查循环内部,以确保您读取的元素没有超过您分配的数量,并适本地处理这种情况。

关于C、从txt文件读入struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49785153/

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