我的想法是,在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);
}
这么改