gpt4 book ai didi

c - 用C读取文本文件

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

这是一个非常菜鸟的问题。我很抱歉,但我无法让它工作。

我有一个带有布局的文本文件:

       movie a
2000
720p
movie b
2002
1080p
movie c
2004
480p

我的代码如下所示:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SOURCE "test.txt"
#define S 50

typedef struct Movie
{
char title[50];
int year;
char quality[7];
}Movie;


int main (void)
{

FILE *f1;
int i = 0;
char buf[3];
int temp;
Movie *movie = NULL;
movie = (Movie*)malloc(sizeof(Movie));


if ((f1 = fopen(SOURCE, "r")) == NULL)
{
perror ("src error!");
printf ("exiting!");
exit (1);
}

while (1)
{
movie = (Movie*)realloc(movie, ((i+1)*sizeof(Movie)));
if (!movie)
{
perror ("mem error");
exit (1);
}
//fgets(movie[i].title, S, f1);
// fscanf(f1, "%s", buf);
// printf("%s", buf);

fscanf(f1, "%[^\n]", movie[i].title);
fscanf(f1, "%d", &movie[i].year);
fscanf(f1, "%s", movie[i].quality);
i++;
if (feof(f1))
break;
}
fclose(f1);


int j=0;
for (;j<=i;j++)
{
printf ("%d :: %s\n ",j, movie[j].title);
printf ("%d :: %d\n ",j, movie[j].year);
printf ("%d :: %s\n\n ",j, movie[j].quality);
}



return 0;
}

从文件读入结构时出现问题当执行程序时,它会以某种方式变得困惑,它将行存储到错误的变量等。我尝试用 fgets 阅读这些行,但我无法弄清楚。任何帮助表示赞赏。谢谢

编辑:这是它产生的输出。看起来是一个非常简单明了的程序。我究竟做错了什么?谢谢

 0 :: movie a
0 :: 2000
0 :: 720p

1 ::
1 :: 0
1 :: movie

2 :: b
2 :: 2002
2 :: 1080p

3 ::
3 :: 0
3 :: movie

4 :: c
4 :: 2004
4 :: 480p

5 ::
5 :: 0
5 ::

最佳答案

在循环中的第三个 fscanf 之后,文件缓冲区中的下一个字符是换行符。在循环的下一次迭代中,使用 %[^\n] 格式说明符的 fscanf 不会读取任何内容,因为它在换行符处停止。这会引发后续读取。

您需要在循环中最后一次读取后使用换行符:

fscanf(f1, "%[^\n]", movie[i].title);
fscanf(f1, "%d", &movie[i].year);
fscanf(f1, "%s", movie[i].quality);
fgetc(f1);

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

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