#include <stdio.h>
void main()
{
char ch;
while(1){
ch = getchar();
if(ch=='\n')
break;
else if(ch >= 'a'&&ch<='z'||ch >= 'A'&&ch<='Z'){
putchar(ch);
}
}
}
因为你输入 getchar() 只有换行才能结束输入, 正好你又是 判断 换行 退出循环,所以你输入一行字符串,然后以 换行结束,它就一个个从输入流里取数据,然后输出字符
当程序调用getchar()时,程序就等着用户按键输入,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)才停止,然后getchar()从缓冲区读走一个个字符,也就是说,后续的getchar()调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。一个简单的代码,供参考验证:
#include <stdio.h>
int main()
{
char input_char;
input_char = getchar();// 如输入:123 回车
putchar(input_char); // 这句输出:1
input_char = getchar();// 这句从缓冲区读取
putchar(input_char); // 这句输出:2
input_char = getchar();// 这句从缓冲区读取
putchar(input_char); // 这句输出:3
// 最终显示效果:123
return 0;
}
在while循环中,putchar()函数只有在按下回车键时才会开始输出的原因是,输入字符时,字符并没有真正到达标准输出流,而是存储在输入缓冲区中。只有当输入缓冲区满了(按下Enter键)或者flush操作被执行时,才会将字符真正输出到标准输出流。
为了让字符在输入时立即输出,可以使用以下解决方案: 1. 使用无缓冲输入函数,比如getch()函数;或者使用输入函数前先调用fflush(stdin)函数刷新输入缓冲区。 2. 每次输入一个字符后立即输出字符,不等待回车键的输入。
下面是一个使用无缓冲输入函数getch()的示例代码:
#include <stdio.h>
#include <conio.h> // 使用getch()的头文件
int main() {
char ch;
while(1) {
ch = getch(); // 无缓冲输入函数,实时获取用户输入的字符
putchar(ch); // 立即将字符输出到标准输出流
if(ch == 'q') // 当输入字符为'q'时退出循环
break;
}
return 0;
}
这段代码会实时地将用户输入的字符逐个输出到屏幕上,并且只有当输入字符为'q'时才会退出循环。
注意:无缓冲输入函数getch()是Windows系统下特有的函数,Linux系统下可以使用getchar()、getc()等函数实现类似功能。