c语言编写一个程序 要从一个txt文档里读入数据到一个链表里

c语言编写一个程序要从一个txt文档里读入数据到一个链表里(->这个符号的,最好是一个子函数可以更改文档名称的)文档是一串串的数据,数字,空格隔开#include<std... c语言编写一个程序 要从一个txt文档里读入数据到一个链表里(-> 这个符号的,最好是一个子函数可以更改文档名称的) 文档是一串串的数据,数字,空格隔开
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define N 100

struct telebook
{
double ncor[N];
double wacor[N];
}*lpcompl;

void load()
{
FILE *fp;
if((fp=fopen("telebook.txt","r"))==NULL)
{
printf("cannot open file\n");
getch();/*让程序暂停一下,按任意键继续*/
exit(0);
}
int i=0;
while(fread(lpcompl->ncor,5,N,fp)!=NULL&&fread(lpcompl->wacor,5,N,fp)!=NULL)/*如果有一个输入不对就结束输入*/
{
printf("%f",lpcompl->ncor);
printf("%f",lpcompl->wacor);
i++;
}
fclose(fp);
}

int main()
{
load();
getch();
return 0;
}

这个编译没有问题,但是运行就出错,是怎么回事?
展开
 我来答
crab2313
2011-06-02 · TA获得超过255个赞
知道小有建树答主
回答量:346
采纳率:0%
帮助的人:285万
展开全部
你这不是链表,fread也用得不对。

晕啦! 就当锻炼了。帮你重写了。
我用的是fgets读文件,所以源文件要用回车隔开。!!!!!!!!记住这点别忘了!!
我这linux没conio.h 用getchar换掉getch了
版本一:命令行传递参数
如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 100

struct telebook{
char nocor[N];
char wacor[N];
struct telebook *next;
}; /*--------- 定义链表 -------*/
struct telebook *next_list(struct telebook *last)
{
/*-----这个函数用于新建一个链表单元,并返回这个新单元的指针--*/
struct telebook *next;
next=(struct telebook*)malloc(sizeof(struct telebook));/*-这句用于给next指针申请内存*/
return next;
}

/*-------- 这个函数用来给链表添加数据 -*/
struct telebook *add(struct telebook *t,char *nocor,char *wacor)
{
struct telebook *next;
next=next_list(t);
strcpy(next->nocor,nocor);
strcpy(next->wacor,wacor);
return next;
}

int main(int argc,char *argv[])
{
struct telebook *head,*temp;/*----- head是链表的开头 temp是临时变量-*/
FILE *fp;

char buf1[N]; /*----- 缓冲区 -*/
char buf2[N];
int i=0;

if(argc!=2){
fprintf(stderr,"Usage %s filename\n",argv[0]);
exit(0);
}/*---------- 判断参数个数 ---------*/

if((fp=fopen(argv[1],"r"))==NULL){
printf("Can't open the file:%s",argv[1]);
exit(0);
}/*--------- 打开文件-------*/

head=temp=(struct telebook*)malloc(sizeof(struct telebook));/*-这行给head申请内存单元*-/
while(fgets(buf1,N,fp)!=NULL & fgets(buf2,N,fp)!=NULL){

/*--- fgets读取一行数据遇到'\n'结束(就是回车啦)-*/
if(buf1[strlen(buf1)-1]=='\n')
buf1[strlen(buf1)-1]='\0';
if(buf2[strlen(buf2)-1]=='\n');
buf2[strlen(buf2)-1]='\0';

temp=add(temp,buf1,buf2); /*-add函数返回下一个链表单元的指针-*/
printf("nocor:%s\twacor:%s\n",temp->nocor,temp->wacor);
/* ---这行打印读到的数据--*/
}

getchar();
return 0;
}

这个要用命令行传递参数。不会的话看这个版本:
版本二:提前订好参数 用#define定义:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 100
#define PATH "这里写你的路径"

struct telebook{
char nocor[N];
char wacor[N];
struct telebook *next;
}; /*--------- 定义链表 -------*/
struct telebook *next_list(struct telebook *last)
{
/*-----这个函数用于新建一个链表单元,并返回这个新单元的指针--*/
struct telebook *next;
next=(struct telebook*)malloc(sizeof(struct telebook));
return next;
}

/*-------- 这个函数用来给链表添加数据 -*/
struct telebook *add(struct telebook *t,char *nocor,char *wacor)
{
struct telebook *next;
next=next_list(t);
strcpy(next->nocor,nocor);
strcpy(next->wacor,wacor);
return next;
}

int main(int argc,char *argv[])
{
struct telebook *head,*temp;/*----- head是链表的开头 temp是临时变量-*/
FILE *fp;

char buf1[N]; /*----- 缓冲区 -*/
char buf2[N];
int i=0;

if(argc!=2){
fprintf(stderr,"Usage %s filename\n",argv[0]);
exit(0);
}/*---------- 判断参数个数 ---------*/

if((fp=fopen(PATH,"r"))==NULL){
printf("Can't open the file:%s",argv[1]);
exit(0);
}/*--------- 打开文件-------*/

head=temp=(struct telebook*)malloc(sizeof(struct telebook));
while(fgets(buf1,N,fp)!=NULL & fgets(buf2,N,fp)!=NULL){

/*--- fgets读取一行数据遇到'\n'结束(就是回车啦)-*/
if(buf1[strlen(buf1)-1]=='\n')
buf1[strlen(buf1)-1]='\0';
if(buf2[strlen(buf2)-1]=='\n');
buf2[strlen(buf2)-1]='\0';

temp=add(temp,buf1,buf2); /*-add函数返回下一个链表单元的指针-*/
printf("nocor:%s\twacor:%s\n",temp->nocor,temp->wacor);
/* ---这行打印读到的数据--*/
}

getchar();
return 0;
}

这就行了,亲自试过了。
有疑问加QQ:648670620
望楼主采纳,以上全手打。。。谢了
更多追问追答
追问
我希望是存进去的都是数字格式的,还要用的,都是0.2314 这种类型的
再弄一下吧 加分哈
追答
这次对了吧,
读出来肯定是字符,
用atof函数把字符串换成double型的,这个改得是版本二,版本一自己改吧

#include
#include
#include

#define N 100
#define PATH "写你的文件路径"

struct telebook {
double nocor;
double wacor;
struct telebook *next;
}; /*--------- 定义链表 -------*/
struct telebook *next_list(struct telebook *last)
{
/*-----这个函数用于新建一个链表单元,并返回这个新单元的指针--*/
struct telebook *next;
next = (struct telebook *) malloc(sizeof(struct telebook));
return next;
}

/*-------- 这个函数用来给链表添加数据 -*/
struct telebook *add(struct telebook *t, char *nocor, char *wacor)
{
struct telebook *next;
next = next_list(t);
next->nocor = atof(nocor);
next->wacor = atof(wacor);
return next;
}

int main(int argc, char *argv[])
{
struct telebook *head, *temp; /*----- head是链表的开头 temp是临时变量-*/
FILE *fp;

char buf1[N]; /*----- 缓冲区 -*/
char buf2[N];
int i = 0;

if ((fp = fopen(PATH, "r")) == NULL) {
printf("Can't open the file:%s", argv[1]);
exit(0);
}
/*--------- 打开文件-------*/
head = temp = (struct telebook *) malloc(sizeof(struct telebook));
while (fgets(buf1, N, fp) != NULL & fgets(buf2, N, fp) != NULL) {

/*--- fgets读取一行数据遇到'\n'结束(就是回车啦)-*/
if (buf1[strlen(buf1) - 1] == '\n')
buf1[strlen(buf1) - 1] = '\0';
if (buf2[strlen(buf2) - 1] == '\n');
buf2[strlen(buf2) - 1] = '\0';

temp = add(temp, buf1, buf2); /*-add函数返回下一个链表单元的指针-*/
printf("nocor:%lf\twacor:%lf\n", temp->nocor, temp->wacor);
/* ---这行打印读到的数据-- */
}

getchar();
return 0;
}
MichealSnake
2011-06-01 · 超过35用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:95.9万
展开全部
没有实际运行, 只是看了一遍代码
发现一个严重的错误。就是变量lpcompl

变量lpcompl是个指针, 在使用之前没有申请内存空间。自然在运行时会错
追问
应该怎么改?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式