红联Linux门户
Linux帮助

linux编程

发布时间:2008-07-03 23:01:49来源:红联作者:永世无悔
include
main()
{
char a,b,c;
scanf("%c",&a);
scanf("%c",&b);
scanf("%c",&c);
putchar(a);
putchar(b);
putchar(c);
}
~
为什么在执行时只输入2个字符时就自动显示2遍前面输入的字符,而不能输入第三那个字符???(5ty(
文章评论

共有 5 条评论

  1. gllw915 于 2010-10-29 16:45:06发表:

    太精髓了

  2. Linux-MJ 于 2009-08-07 19:43:25发表:

    [i=s] 本帖最后由 Linux-MJ 于 2009-8-7 19:44 编辑 [/i]

    LZ, 是你没有理解scanf函数对缓冲区的处理, 该函数会将输入缓冲区的字符取走并赋给你的变量.
    假如执行你的程序时:
    scanf("%c",&a);
    scanf("%c",&b);
    scanf("%c",&c);
    当我输入1并回车后,缓冲区里有两个字符:'1'和'\n', scanf("%c",&a)返回, 此时a='1', 缓冲区里还有'\n'!!!
    然后 scanf("%c",&b)立即返回, b='\n',(不等待你输入!)
    然后阻塞在 scanf("%c",&c), 若输入2, 函数返回, c='2'.

    结果: 只能显示: 1\n2, '\n'是换行,
    所以你只能看到: 1
    2

  3. js001sdx 于 2009-08-07 16:31:20发表:

    {:3_108:}看不懂,帮忙顶

  4. lyq617617 于 2008-07-09 10:07:39发表:

    索性就这么写
    scanf("%c%c%c",&a,&b,&c);
    输入字符时用空格空开.
    你的程序没有什么问题,应该是你输入时有误!

  5. whans 于 2008-07-04 12:16:03发表:

    $./executefilename //在终端中输入可执行文件名
    abc //输入三个字符
    abc$ //运行结果

    估计你是输入一个字符后就来个回车。