我尝试使用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
答案 0 :(得分:1)
您在问题中发布的代码中存在大量拼写错误。
FILE *f
声明不以分号结尾; while(client!NULL)
中的条件无效C条件,应该!=
; head
和tail
未宣布。我希望通过这种代码的工作版本的方式。
您的问题是什么,代码在编写时正常工作 - 您的mygets
函数从文件中读取一行,因此在while(!feof(filename))
循环中逐行读取文件内容(名称) ,年龄,身高,体重)并将条目放入链表。然后,您只需通过从头到尾遍历链表来打印它们。