标题:新手求助:小弟向各位大哥教下面这段程序中的几个问题,谢谢!
只看楼主
npsgsys
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-1-17
 问题点数:0 回复次数:1 
新手求助:小弟向各位大哥教下面这段程序中的几个问题,谢谢!

我这段程序是在哪里响应了 enter 和 CTRL+D 谢谢!

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#define DATASIZE 10


typedef struct stringdata
{
char *string; //字符串
int *iscontinuing; //是否是结尾了
struct stringdara *next;
}mydata ;

mydata *append(mydata *start ,char *input);
void display(mydata *start);
void freedata(mydata *start);

int main(void)
{
char input[DATASIZ];
mydata *start=NULL;

printf("Enter some data ,And enter CTRL+D when done /n");

//现在需要输入数据
while((gets(input,sizeof(input),stdin)))
{
start=append(start,input);
}

displaydata(start);
freedata(start);
return 0;
}


mydata *append(mydata *start,char input);
{
mydata *cur=start ,*prev=NULL ,*new;

while(cur) //如果当前指针不为空
{
prev=cur; //给 prev 赋当前指针
cur=cur->next; //然后当前指针后移
}//一直移到最后面一个节点

cur=prev; //这个不知道是什么意思?

new=malloc(sizeof(mydata));//开辟一个新的节点

if((!new)) //如果节点开辟不成功
{
printf("coun't allocate memory !/n");
exit(255);
}

if (cur) //如果目前的节点不为 NULL
cur->next=new; //这个是什么意思?为什么不是 new=cur-next
else
start=new; //这个是什么意思?

cur=new; //这个是什么意思?


if(!(cur->string=malloc(sizeof(input)+1)))
{
printf("ERROR ALLOCATING MEMORY! \n");
exit(255);
}
strcpy(cur->string, input);
cur->iscontinuing=!(input[strlen(input)-1]=='\n'||input[strlen(input)-1]=='\r');
cur->next=NULL;

return start;
}


void displaydata(mydata *start)
{
mydata *cur;
int linecounter=0, structcounter=0;
int newline=1;

cur=start;
while(cur)
{
if(newline)
printf("LINE %d:",++linecounter);
structcounter++;
printf("%s",cur->string);
newline=!cur->iscontinuing;
cur=cur->next;
}
printf("THIS DATA CONTAINED %d LINES AND WAS STORED IN %d STRUCTS. \n",
linecounter,structcounter);
}


void freedata(mydata *start)
{
mydata *cur, *next=NULL;

cur=start;
while(cur)
{
next=cur->next;
free(cur->string);
free(cur);
cur=next;
}
}

//这个程序将终端输入的一系列字符串用链表的形式保存下来。然后将这这些数据组装起来
//回显到终端。链表的节点为 stringdata 结构。stringdata 结构中的整型量 iscontinuing
//用于表示当前节点是否为链表的末尾。如果 iscontinuing 有值,则表示此节点不是链表的
//末尾。

请教:当程序编译运行后
输入:
123 回车
werrt 回车
234d 回车

然后输入
CTRL+D

就显示
123
werrt
234d


问题1:
我的在这个程序 在哪里响应了enter 这个动作
在哪里响应了 CTRL+D 这个动作

问题2:
mydata *append(mydata *start,char input);
{
mydata *cur=start ,*prev=NULL ,*new;

while(cur) //如果当前指针不为空 ,为什么要这个 while 循环,它在这里有什么用?
{
prev=cur; //给 prev 赋当前指针
cur=cur->next; //然后当前指针后移
}//一直移到最后面一个节点

cur=prev; //这个不知道是什么意思?

new=malloc(sizeof(mydata));//开辟一个新的节点

if((!new)) //如果节点开辟不成功
{
printf("coun't allocate memory !/n");
exit(255);
}

if (cur) //如果目前的节点不为 NULL
cur->next=new; //这个是什么意思?为什么不是 new=cur-next
else
start=new; //这个是什么意思?

cur=new; //这个是什么意思?


if(!(cur->string=malloc(sizeof(input)+1)))
{
printf("ERROR ALLOCATING MEMORY! \n");
exit(255);
}
strcpy(cur->string, input);
cur->iscontinuing=!(input[strlen(input)-1]=='\n'||input[strlen(input)-1]=='\r');
cur->next=NULL;

return start;
}

我注释不能理解的?


问题3:
cur->iscontinuing=!(input[strlen(input)-1]=='\n'||input[strlen(input)-1]=='\r');

是什么意思?

谢谢各位大哥!

搜索更多相关主题的帖子: 字符串 include display start 
2006-07-10 15:05
ccjamting
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-7-10
得分:0 

对论坛灰心,以被本人删除。

[此贴子已经被作者于2006-7-31 16:52:46编辑过]


即非出自名门,又系旁门左道,我,就这样笑着。
2006-07-10 16:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-77547-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.957482 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved