C相关,小白提问勿喷,感谢回答。

我的想法是,在getchar时屏蔽掉最后的‘Enter’,实际上却与我想的xiang'cha

#include <stdio.h>

程序如下:

#include <limits.h>

char get_choice(void);

int main(void)

{

    char ch;

    while (getchar() != '\n')

    {

        ch = getchar();

        putchar(ch);

    }

    return 0;

输入如下:

输入:a(Enter)

输出:(空白)

输入:abcdef
输出:bdf

已自己解决,第一个 while (getchar() != '\n') 中的getchar 获取了键盘输入的字符中的第一个字符。

键盘输入在按下Enter时,缓冲区会发送一串“字符+‘\n’ ”数据流stream。其中getchar 会从数据流中读取每个字符,如上,当输入“abcdef”时,缓冲区生成发送“abcdef和’\n‘,while (getchar() != '\n')中的getchar获取了第一个字符’a‘,ch = getchar()获取了第二个字符b,然后while (getchar() != '\n')中的getchar 获取了第三个字符c,ch = getchar()获取了第二个字符d,以此类推,当执行到最后while (getchar() != '\n') 刚好获取到“abcdef和’\n‘数据流中的’\n‘时,while循环退出。依次putchar了bdf。

如上,如果输入的字符不能刚好时’\n‘对应while (getchar() != '\n')中的判断式,会造成一直无限循环。类似这种

while ((ch=getchar()) != '\n')

{ putchar(ch); }

最后按下Enter键时,形成的stream中最后一个字符一定是'\n' ,一定能被判断式(ch=getchar()) != '\n' 识别并退出while循环。但此时的ch的值已经被赋值为了'\n'。

	while ((ch=getchar()) != '\n')
	{
		putchar(ch);
	}

这么改