LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 796|回复: 5

getchar()函数这么奇怪!

[复制链接]
发表于 2006-4-27 09:34:45 | 显示全部楼层 |阅读模式
源文件:
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
main()
{
  char c;
  for (;;) {
    c=getchar();
    printf("character:%c\n",c);
}
}

运行结果:
[root@localhost socket]# ./a.out
a
character:a
character:


在for循环里,为什么getchar()好像得到了键盘的两次输入?为什么它运行了两次咧?
是不是有隐藏字符啊,怎么把隐藏字符去掉?
发表于 2006-4-27 10:05:23 | 显示全部楼层
它把你输入字符后的那一个回车当作下一次的输入了,因为键盘的输入都作了缓冲,而getchar就是从这个缓冲区读取的数据,你可以试一下多输入几个字符而不是一个,像这样:
aaa   bb
这将打印出来
character:a
character:a
character:a
character:
character:
character:
character:b
character:b
character:
回复 支持 反对

使用道具 举报

发表于 2006-4-27 10:35:27 | 显示全部楼层
这是初用C语言的常见问题,你可以参考一下我这个程序里的getchar()的用法。
源文件的编码是utf-8

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2006-4-27 10:58:06 | 显示全部楼层
char mygetchar()
{
     char c,d;
     while(1)
    {
         c = getchar();
         while(1)
         {
              d = getchar();
              if(d == '\n') break;
         }
   }
   return c;
}
回复 支持 反对

使用道具 举报

发表于 2006-4-27 11:12:24 | 显示全部楼层
楼上的程序想法很好,我按他的思路简化一下程序
回复 支持 反对

使用道具 举报

发表于 2006-4-27 11:15:22 | 显示全部楼层

  1. /* get the first one charater */
  2. char mygetchar(void) {
  3.     char c;
  4.     c = getchar();
  5.     while(getchar() != '\n')
  6.         ;
  7.     return c;
  8. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表