| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 194 人关注过本帖
标题:请问getchar()和putchar()是怎么工作的?为什么我输入一个字符并不会立刻输 ...
只看楼主 加入收藏
Niderhoger
Rank: 1
等 级:新手上路
帖 子:12
专家分: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: 11Rank: 11Rank: 11Rank: 11
来 自:CC
等 级:贵宾
威 望:25
帖 子:1236
专家分:2075
注 册:2007-12-27
  得分:10 
C语言的设计者认为输入输出是基于流的。
那么问题来了,得有数据“流到”你那儿你才能处理啊。
一般认为处于常规状态的控制台上你敲字在没有回车之前,字都是可编辑的,也就是说这时它在操作系统控制下,没有“流”到你家。
回车之后,刚才这行被系统送到你的程序的输入缓冲区

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


别人能不等于你能,别人不能不等于你不能
不要问别人能不能,要说:我能
2019-11-15 19:00
forever74
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:CC
等 级:贵宾
威 望:25
帖 子:1236
专家分:2075
注 册:2007-12-27
  得分:0 
大白话就是,就算你是领导,也得有文件送到你桌上你才有地方签字啊。

别人能不等于你能,别人不能不等于你不能
不要问别人能不能,要说:我能
2019-11-15 19:01
自学的数学
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:30
帖 子:791
专家分:3336
注 册: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
等 级:新手上路
帖 子:12
专家分:0
注 册:2019-11-3
  得分:0 
嗯 明白一些了 谢谢大家
2019-11-17 10:41
Niderhoger
Rank: 1
等 级:新手上路
帖 子:12
专家分: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: 5Rank: 5
等 级:职业侠客
威 望:3
帖 子:127
专家分:334
注 册: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
快速回复:请问getchar()和putchar()是怎么工作的?为什么我输入一个字符并不会立 ...
数据加载中...
 
   



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

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