植物数据我列举了一些放在txt文件中,程序从txt文件读取加载到链表中,再通过用户输入名称查找链表信息。
txt文件格式每行一个植物:植物名 空格 科属?空格?形态特征?空格?使用价值 回车。
八宝景天?景天科景天属?多年生肉质草本植物?园林绿化,具有药用价值。玉兰?木兰科木兰属玉兰亚属玉兰?落叶乔木?园林绿化。
银杏?银杏科银杏属?落叶大乔木?可食用,药用,园林绿化。
槐树?豆科?五叶槐?园林绿化。
红枫?槭树科槭树属?落叶小乔木?园林绿化。
海棠?属蔷薇科苹果亚科苹果属?落叶小乔木?园林绿化。
三色堇?堇菜科堇菜属?多年生草本植物?具有药用价值,中国多用作园林绿化。
月季?蔷薇科蔷薇属?半常绿低矮灌木?园林绿化。
杨树?杨柳科杨属?乔木或灌木?园林绿化。
石榴树?石榴科?落叶灌木或小乔木?园林绿化,果实食用,药用。#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef?struct?plant
{
char?name[20];
char?genera[50];
char?charas[1000];
char?value[100];
struct?plant?*next;
}PLANT;
PLANT?*readFile(FILE?*fp);//返回头节点指针
PLANT?*findByName(PLANT?*plantHead,char?name[]);
int?main()
{
char?name[20];
PLANT?*plantHead=NULL,*plantFind=NULL;
FILE?*fp=NULL;
if((fp=fopen("C:\\list.txt","rt+"))==NULL)
{
printf("Cannot?open?file?strike?any?key?exit!");
exit(1);
}
plantHead=readFile(fp);
printf("请输入要查找的植物名称:");
scanf("%s",name);
plantFind=findByName(plantHead,name);
printf("%s的所属科属:%s\n形态特征:%s\n使用价值:%s",plantFind->name,plantFind->genera,plantFind->charas,plantFind->value);
return?0;
}
PLANT?*findByName(PLANT?*plantHead,char?name[])
{
while(plantHead->next!=NULL)
{
if(!strcmp(plantHead->next->name,name))
return?plantHead->next;
plantHead=plantHead->next;
}
return?NULL;
}
PLANT?*readFile(FILE?*fp)//返回头节点指针
{
PLANT?*plantNew=NULL,*plantHead=NULL,*plantTail=NULL;
printf("----开始读取文件到链表----\n");
fseek(fp,?0,?SEEK_SET);//文件流指针重置到开头
plantHead=(PLANT?*)malloc(sizeof(PLANT));
plantHead->next=NULL;
plantNew=(PLANT?*)malloc(sizeof(PLANT));
plantNew->next=NULL;
while(fscanf(fp,"%s?%s?%s?%s",plantNew->name,plantNew->genera,plantNew->charas,plantNew->value)!=-1)
{
if(plantHead->next==NULL)
plantHead->next=plantNew;
else
plantTail->next=plantNew;plantTail=plantNew;
printf("读取信息:名:%s?科属:%s?特征:%s?价值:%s\n",plantNew->name,plantNew->genera,plantNew->charas,plantNew->value);
plantNew=(PLANT?*)malloc(sizeof(PLANT));
plantNew->next=NULL;
}
free(plantNew);
printf("----数据读取完成----\n");
return?plantHead;
}