标题:请问getchar()和putchar()是怎么工作的?为什么我输入一个字符并不会立刻输 ...
只看楼主
Niderhoger
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-11-3
结帖率:100%
已结贴  问题点数:20 回复次数:6 
请问getchar()和putchar()是怎么工作的?为什么我输入一个字符并不会立刻输出?而是等待输入换行符才进行输出?
请问getchar()和putchar()是怎么工作的?为什么我输入一个字符并不会立刻输出?而是等待输入换行符才进行输出?

//cypher1.c--更改输入,空格不变
#include <stdio.h>
#define SPACE ' '     /*SPACE表示单引号-空格-单引号*/
int main(void)
{
    char ch;

    ch = getchar();       /*读取一个字符*/
    while (ch != '\n')    /*当一行未结束时*/
    {
        if (ch == SPACE)   /*留下空格*/
            putchar(ch);   /*该字符不变*/
        else
            putchar(ch + 1);  /*改变其他字符*/
        ch = getchar();    /*获取下一个字符*/
    }
    putchar(ch);     /*打印换行符*/

    return 0;
}
搜索更多相关主题的帖子: getchar 输出 输入 字符 putchar 
2019-11-15 17:59
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:10 
C语言的设计者认为输入输出是基于流的。
那么问题来了,得有数据“流到”你那儿你才能处理啊。
一般认为处于常规状态的控制台上你敲字在没有回车之前,字都是可编辑的,也就是说这时它在操作系统控制下,没有“流”到你家。
回车之后,刚才这行被系统送到你的程序的输入缓冲区

[此贴子已经被作者于2019-11-15 22:39编辑过]


对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2019-11-15 19:00
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
大白话就是,就算你是领导,也得有文件送到你桌上你才有地方签字啊。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2019-11-15 19:01
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:10 
getchar() 用于读取用户从键盘输入的单个字符,它有一个整型的返回值,当发生读取错误的时候,返回整型值-1,当读取正确的时候,它会返回用户从键盘输的第一个字符的ASCII码,当程序调用getchar时.运行程序时就等着用户从按键输入,用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中),当用户键入回车之后,getchar才开始从输入流中每次读入一个字符,输入的字符不只一个的时候,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完之后,才等待用户按键,getchar函数输入数字也按字符处理,单个的getchar函数输入多于一个字符时,只接收第一个字符。
    putchar()向终端输出一个字符。其格式为putchar(ch),其中ch可以是被单引号(英文状态下)引起来的一个字符,可以是介于0~127之间的一个十进制整型数(包含0和127)(超过127就不是ASCII码了),也可以是事先用char定义好的一个字符型变量当c为一个被单引号(英文状态下)引起来的字符时,输出该字符(注:该字符也可为转义字符),当c为一个介于0~127(包括0及127)之间的十进制整型数时,它会被视为对应字符的ASCII代码,输出该ASCII代码对应的字符;当c为一个事先用char定义好的字符型变量时,输出该变量所指向的字符。
2019-11-15 20:47
Niderhoger
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-11-3
得分:0 
嗯 明白一些了 谢谢大家
2019-11-17 10:41
Niderhoger
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-11-3
得分:0 
那么意思是getchar()让我输入的字符都留在一个缓冲区,然后putchar呢?

ch = getchar();      
    while (ch != '\n')   
    {
        if (ch == SPACE)   
            putchar(ch);   
        else
            putchar(ch + 1);
        ch = getchar();  
    }

这一段是我 输入的时候就已经确定了输出还是输入完在确定输出?
意思是我输入一个字符的过程中就执行了if else语句还是等我输入所有字符之后再对每个字符进行挑选?
2019-11-17 11:15
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
得分:0 
这段话已经讲的很清楚了,建议认真读一读!!!

以下是引用自学的数学在2019-11-15 20:47:32的发言:

getchar() 用于读取用户从键盘输入的单个字符,它有一个整型的返回值,当发生读取错误的时候,返回整型值-1,当读取正确的时候,它会返回用户从键盘输的第一个字符的ASCII码,当程序调用getchar时.运行程序时就等着用户从按键输入,用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中),当用户键入回车之后,getchar才开始从输入流中每次读入一个字符,输入的字符不只一个的时候,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完之后,才等待用户按键,getchar函数输入数字也按字符处理,单个的getchar函数输入多于一个字符时,只接收第一个字符。
    putchar()向终端输出一个字符。其格式为putchar(ch),其中ch可以是被单引号(英文状态下)引起来的一个字符,可以是介于0~127之间的一个十进制整型数(包含0和127)(超过127就不是ASCII码了),也可以是事先用char定义好的一个字符型变量当c为一个被单引号(英文状态下)引起来的字符时,输出该字符(注:该字符也可为转义字符),当c为一个介于0~127(包括0及127)之间的十进制整型数时,它会被视为对应字符的ASCII代码,输出该ASCII代码对应的字符;当c为一个事先用char定义好的字符型变量时,输出该变量所指向的字符。
2019-11-19 15:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-497836-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.122748 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved