while循环语句中输入多个字母,为什么只有当输入回车时才能执行putchar()将全部字母进行输出。


#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;
}

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7585790
  • 这篇博客你也可以参考下:C语言中的putchar函数
  • 同时,你还可以查看手册:c语言-putchar() 中的内容
  • 您还可以看一下 刘华老师的二级-C语言程序设计课程中的 getchar和putchar小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    在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()等函数实现类似功能。