Fgets从文件到行尾

时间:2013-09-25 16:00:35

标签: c fgets

我尝试使用mygets函数,以便fgets只读取一行:

void * mygets(char *name, int len, FILE * stream)
{
    fgets(name,len,stream);

    if (name[strlen(name) - 1] == 10)
    {
        name[strlen(name) - 1] = 0;
    }
}

文件内容为:

John Smith //Name

19 // Age

175.62 // Height

87  // Weight

使用单个链表,我只想让*mygets只读John Smith,然后通过以下方式将其存储到名为client的typedef结构中:

typedef struct nodebase{
    char name[40]; //Just in case, the client's name can be long
    int age;
    double height;
    int weight;
    struct nodebase *next;
    }listnode;

int main()
{
listnode *head;
listnode *tail;
listnode *client;
FILE *f;

f=fopen("filename.txt","r");

while(!feof(filename))
{
    client = malloc(sizeof(listnode));
    mygets(client->name,40,filename);

    if (head == NULL)
    {
        head = client;
    }
    else 
    {
        tail->next=client;
    }
    tail = client;
    client =head;
}

while(client!=NULL)
{
    printf("\n%s\n",&client->name);
    client = client->next;
}

}

但问题是,程序打印整个文件(包括年龄,身高和体重)。

我发现*mygets没有任何问题。

***我在Windows上使用Tiny C

1 个答案:

答案 0 :(得分:1)

您在问题中发布的代码中存在大量拼写错误。

  1. FILE *f声明不以分号结尾;
  2. while(client!NULL)中的条件无效C条件,应该!=;
  3. headtail未宣布。
  4. 我希望通过这种代码的工作版本的方式。

    您的问题是什么,代码在编写时正常工作 - 您的mygets函数从文件中读取一行,因此在while(!feof(filename))循环中逐行读取文件内容(名称) ,年龄,身高,体重)并将条目放入链表。然后,您只需通过从头到尾遍历链表来打印它们。