免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2504 | 回复: 8
打印 上一主题 下一主题

问个getchar()的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-07 07:19 |只看该作者 |倒序浏览
  1. LinkList create(void)
  2. {
  3.     LinkList head;
  4.     LNode *p1;
  5.     char a;
  6.     head = NULL;
  7.     printf("Please input the linklist's records:\n");
  8.     a = getchar();
  9.     while (a != '\n')
  10.     {
  11.         p1 = (LinkList)malloc(sizeof(LNode)); /*分配空间*/
  12.         p1->num = a; /*数据域赋值*/
  13.         p1->next = head;
  14.         head = p1;
  15.         a = getchar();
  16.     }
  17.     return head;
  18. }
复制代码
第二个a=getchar()有什么意义  我去掉了 当调用时就会无法向下进行
getchar() 从键盘上读取一个键,并返回该键的键值
但是也没从键盘上再次读取值 难道是从新赋值的p1->num=a 就是从键盘上赋值吗
实在不明白  希望哪位能给详解  谢谢

论坛徽章:
0
2 [报告]
发表于 2010-05-07 07:49 |只看该作者
“getchar() 从键盘上读取一个键,并返回该键的键值”
调用一次得到一个键值,要得到下一个键值,得再次调用它。所以第二个不能去掉,去掉的话,a的值就不变了,while语句绝大多数情况下就发生死循环了。
这个问题很基础,建议多看几遍书吧。

论坛徽章:
0
3 [报告]
发表于 2010-05-07 07:56 |只看该作者
为什么不
while ((a = getchar()) != '\n')
     {
      //……
     }

感觉这才象C程序

论坛徽章:
0
4 [报告]
发表于 2010-05-07 09:27 |只看该作者
囧~~~
呵呵,有个缓冲区的东东

论坛徽章:
0
5 [报告]
发表于 2010-05-07 09:57 |只看该作者
顺便说一句,getchar的返回值是int类型的

论坛徽章:
0
6 [报告]
发表于 2010-05-07 16:48 |只看该作者
因为你要不停的(从缓冲区)读取字符,所以没循环一次都要读取一次亚

论坛徽章:
0
7 [报告]
发表于 2010-05-08 10:48 |只看该作者
LinkList create(void)
{
    LinkList head;
    LNode *p1;
    char a;
    head = NULL;
    printf("Please input the linklist's records:\n");
    a = getchar();
    while (a != '\n')
    {
        p1 = (LinkList)malloc(sizeof(LNode)); /*分配空间*/
        p1->num = a; /*数据域赋值*/
        p1->next = head;
        head = p1;
        a = getchar();
    }
    return p1/*head*/;
}

论坛徽章:
0
8 [报告]
发表于 2010-05-08 13:17 |只看该作者
强化基础!

论坛徽章:
0
9 [报告]
发表于 2010-05-08 14:06 |只看该作者
回复 1# daodaohu123


       1. LinkList create(void)
   2. {
   3.     LinkList head;
   4.     LNode *p1;
   5.     char a;
   6.     head = NULL;
   7.     printf("Please input the linklist's records:\n");
   8.     a = getchar();
   9.     while (a != '\n')
  10.     {
  11.         p1 = (LinkList)malloc(sizeof(LNode)); /*分配空间*/
  12.         p1->num = a; /*数据域赋值*/
  13.         p1->next = head;
  14.         head = p1;
  15.         a = getchar();
  16.     }
  17.     return head;
  18. }
你这个程序是有一个致命问题的。我认为这个只能执行一次。在Linux下面
原因:getchar()只读入一个你想要的字符,但是回车符也进入了驱动的缓冲区,第二个getchar不会等你输入
      在第二个之后再加一句a=getchar()can work
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP