我这段程序是在哪里响应了 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');
是什么意思?
谢谢各位大哥!