夙惜言 发表于 2020-6-28 14:27:49

关于循环内部的getchar()是怎么执行的

先附上代码

#include <stdio.h>
int main(void)
{
        for(char ch; (ch = getchar()) != '\n' ;)
        {
                printf("%c\n",ch);
        }

        return 0;
}

运行结果是这样的

但为什么是先一次性吧字符串输入,等接收到‘\n’再逐一输出,而不是

a(输入) printf:a(输出)‘回车’
b(输入) printf:b(输出)‘回车’
c(输入) printf:c(输出)‘回车’
'\n' 结束

这样输入一个字符循环一圈之后判断,再读取另一个字符直到遇到‘\n’

永恒的蓝色梦想 发表于 2020-6-28 14:30:00

因为有缓冲区

jhanker 发表于 2020-6-28 14:57:09

getchar()使用说明:getchar()有一个int型的返回值.当程序调用getchar()时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后, getchar()才开始从stdio流中每次读入一个字符. getchar()函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar()调用读取.也就是说,后续的getchar()调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.
getch()与getchar()基本功能相同,差别是getch()直接从键盘获取键值,不等待用户按回车,只要用户按一个键, getch()就立刻返回, getch()返回值是用户输入的ASCII码,出错返回-1.输入的字符不会回显在屏幕上. getch()函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch()函数暂停程序运行,当按任意键后程序继续运行.

CodingCat_k 发表于 2020-6-28 14:57:12

每次执行循环都会先执行ch=getchar()这个语句,即将缓冲区内的第一个字符赋值给ch;
然后再对ch进行判断,如果这次赋值的不为回车符就打印ch;
程序第一次进循环之前,会由于ch=getchar()这个语句等待用户输入;
当你输入完之后回车,getchar()会依次从你输入的字符中读取,每次读取完一个就丢弃一个。直到读取到回车后,
由于循环条件设置程序结束。
页: [1]
查看完整版本: 关于循环内部的getchar()是怎么执行的