【发布时间】:2017-04-20 18:06:58
【问题描述】:
我有一个文件,其中包含有关此类电影的信息:
Film code
Name
Year of release
Movie length(in minutes)
The film producer
我必须从文件中读取此信息并将该信息存储到指针中。到目前为止我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct filmiab
{
int koodpk;
char *nimed;
int aasta;
int kestus;
char *rezi;
} filmiab;
int main()
{
filmiab *db;
FILE *f1;
f1 = fopen("filmid.txt", "r");
db->nimed = (char*)malloc(sizeof(db->nimed) * sizeof(char));
db->rezi = (char*)malloc(sizeof(db->rezi) * sizeof(char));
while(1)
{
fscanf(f1, "%d ", &db->koodpk);
fgets(db->nimed, 100, f1);
db->nimed = (char*)realloc(db->nimed, sizeof(char) * sizeof(db->nimed)); //gets more memory to store the strings
fscanf(f1, "%d %d ", &db->aasta, &db->kestus);
fgets(db->rezi, 100, f1);
db->rezi = (char*)realloc(db->rezi, sizeof(char) * sizeof(db->rezi));
printf("Filmi kood: %d\nFilmi nimi: %sAasta: %d\nKestus minutites: %d\nFilmi rezis66r: %s\n",
db->koodpk, db->nimed, db->aasta, db->kestus, db->rezi);
printf("\n");
}
return 0;
}
它只是进入一个无限循环并且只打印最后 5 行。我知道使用 fgets 时,它会用最后 5 行替换所有字符串。 但是我该怎么做才能存储所有信息,这样我就可以在另一个函数中将它们打印出来(或只是使用它们)。为什么会陷入无限循环?
编辑: 我必须只使用在结构中创建的指针。
编辑2: 现在这两行 fgets(db->nimed, 100, f1); fgets(db->rezi, 100, f1); 存储所需的信息和空格。这样做它只存储电影和制片人的名称。
【问题讨论】:
-
1)
filmiab *db;-->filmiab db;2)char *nimed;-->char nimed[100]; -
它只是给出一个错误:二进制操作数无效。但这里不是这样。问题出在while循环中。编辑:我必须使用指针 - 这是要求之一(学校作业)。
-
请在使用指针前在指针中设置合适的内存块。
-
退出循环示例:
if(EOF==fscanf(f1, "%d ", &db->koodpk)) break; -
我已经完成了,我只是省略了那部分。
标签: c