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



											
	    

	
