相关疑难解决方法(0)

如何避免使用getchar()按Enter键

在下一个代码中:

#include <stdio.h>

int main(void) {   
  int c;   
  while ((c=getchar())!= EOF)      
    putchar(c); 
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我必须按Enter下来打印我输入的所有字母getchar,但我不想这样做,我想要做的就是按下这封信,然后立即看到我重复介绍的信,而不是按下Enter.例如,如果我按下'a'字母,我想在旁边看到另一个'a',依此类推:

aabbccddeeff.....
Run Code Online (Sandbox Code Playgroud)

但当我按'a'时没有任何反应,我可以写其他字母,只有当我按下时才会出现副本Enter:

abcdef
abcdef
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

我正在使用cc -o example example.cUbuntu下的命令进行编译.

c getchar

70
推荐指数
6
解决办法
11万
查看次数

getchar()和stdin

一个相关的问题在这里,但我的问题是不同的.

但是,我想更多地了解getchar()和stdin的内部结构.我知道getchar()最终只调用fgetc(stdin).

我的问题是缓冲,stdin和getchar()行为.鉴于经典的K&R示例:

#include <stdio.h>

main()
{
    int c;

    c = getchar();
    while (c != EOF) {
        putchar(c);
        c = getchar();
    }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,getchar()的行为可以描述如下:

如果stdin缓冲区中没有任何内容,请让OS接受用户输入,直到按下[enter].然后返回缓冲区中的第一个字符.

假设程序运行并且用户键入"凤尾鱼".

因此,在上面的代码清单中,第一次调用getchar()等待用户输入并将缓冲区中的第一个字符分配给变量c.在循环内部,第一次迭代对getchar()的调用说:"嘿,缓冲区中有东西,返回缓冲区中的下一个字符." 但是while循环的第N次迭代导致getchar()说"嘿,缓冲区中没有任何东西,所以让stdin收集用户键入的内容.

我花了一点时间使用c源代码,但似乎这更像是stdin而不是fgetc()的行为神器.

我错了吗?感谢您的见解.

c

7
推荐指数
3
解决办法
3万
查看次数

标签 统计

c ×2

getchar ×1