以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  字符串动态输入的结束标志问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=84093)


--  作者:这云里
--  发布时间:4/1/2010 12:48:00 PM

--  字符串动态输入的结束标志问题
各位高手来帮帮小弟吧,在c语言的字符串动态输入中,经常要有一个特殊字符(如'$')作为结束的标志。我一直感觉很别扭,因为在我们生活中要想输入一个字符串后,一按“确定”就ok了。能不能用按enter键作为结束标志呢?上网说enter的控制字符是“CR”,试过了,不行呀。下面这段程序是链表的操作,涉及这个问题。能不能出点主意啊?
#include<stdio.h>
#include<malloc.h>
#define error 0
#define ok 1

typedef struct Node    //链表的定义
{
 int data;
 struct Node *next;
}Node,*linklist;

void Initlist(linklist *L)  //初始化   
{
 *L=(linklist)malloc(sizeof(Node));
 (*L)->next=NULL;
}

void creat(linklist L)     //头插法
{
 Node *s;
 char c;
 int flag=1;

 while(flag)
 {
  c=getchar();
  if(c!='$')
  {
   s=(Node *)malloc(sizeof(Node));
   s->data=c;
   s->next=L->next;
   L->next=s;
  }
  else flag=0;
 }
}

void pri(linklist L)      //输出创建的链表
{
 Node *p;
 p=L->next;
 while(p!=NULL)
 {
  printf("%s",p);
  p=p->next;

 }
}


void main()
{
        char i,e=1;
 linklist po;                //声明一个头指针
 linklist *p=&po;            //声明一个指向头指针的指针
        Initlist(p);                 //初始化
        creat(po);                   //头插法建立链表
        pri(po);                     //输出链表
 printf("\n");
}


--  作者:卷积内核
--  发布时间:4/1/2010 3:30:00 PM

--  
要添加一个头文件“conio.h”

不是用getchar(),应该getch()函数
具体如下
char ch;
ch=getch();

char ch=getchar();函数每次从键盘缓冲区读一个字符赋给ch,当顺序输入一串字符的时候如'a','b','c'时,这些字符按顺序存储在键盘缓冲区内,getchar只有当用户键入一个'\n'时才读数据,也就是说,getchar只有在'\n'进入到键盘缓冲区以后才从键盘缓冲区读数据,因为每次只读一个字符,所以ch='a',而‘b’,'c','\n'仍在键盘缓冲区内,加入后边又有一句char ch1=getchar();则读入ch1='b';
如你所说:
char ch=getchar();
char ch1=getchar();
你说如一个'a'然后回车,则ch='a',ch1='\n';


--  作者:mzpklm
--  发布时间:4/21/2010 10:52:00 AM

--  
void creat(linklist L)     //头插法
{
Node *s;
char c;
int flag=1;

while(flag)
{
  c=getchar();
  if(c!='$')//在这里不是'$',要是你想按enter键结束输入。此处换成if(c!='\n')。enter键是'\n'
  {
   s=(Node *)malloc(sizeof(Node));
   s->data=c;
   s->next=L->next;
   L->next=s;
  }
  else flag=0;
}
}
不知这样是否合乎你的要求,我一般就是这样处理


--  作者:rockey_yama
--  发布时间:6/9/2010 12:19:00 AM

--  
我改了一下,没有问题。不知道是否符合要求。
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define error 0
#define ok 1

typedef struct Node    //链表的定义
{
char data;
struct Node *next;
}Node,*linklist;

void Initlist(linklist *L)  //初始化   
{
*L=(linklist)malloc(sizeof(Node));
(*L)->next=NULL;
}

void creat(linklist L)     //头插法
{
Node *s;
char c;
int flag=1;

while(flag)
{
  c=getchar();
  if(c!='$')
  {
   s=(Node *)malloc(sizeof(Node));
   s->data=c;
   s->next=L->next;
   L->next=s;
  }
  else flag=0;
}
}

void pri(linklist L)      //输出创建的链表
{
Node *p;
p=L->next;
while(p!=NULL)
{
  printf("%c",p->data);
  p=p->next;

}
}

void main()
{
    //    char i,e=1;
 linklist po;                //声明一个头指针
// linklist *p=&po;            //声明一个指向头指针的指针
        Initlist(&po);                 //初始化
 creat(po);                   //头插法建立链表
       pri(po);                     //输出链表
 printf("\n");
}


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.997ms