【C语言基础】-04字符输入/输出

本文详细介绍了C语言中的字符输入输出函数getchar()和putchar()的使用方法及注意事项,对比了它们与scanf()的不同之处,并通过实例展示了getchar()与scanf()混合使用的潜在问题。

前言:【C语言基础】系列文章是根据C Primer Plus(第五版)中文版一书内容加以逻辑性概括。记录自己的成长。

字符输入输出主要介绍讲两个函数:getchar()和putchar()以及一个需要格外注意的知识点。

字符输入/输出

  • getchar()和putchar()都是单字符I/O,即一次只能输出一个字符。

1、getchar()

函数定义:

int getchar();//需要注意的是getchar()函数没有参数,并将获得字符返回

函数调用:

char ch;

ch=getchar();//将获得的字符返回给ch

与scanf()不同,getchar()会读取每一个字符,包括空格、制表符和换行符。而scanf()则会跳过这些字符。

2、putchar()

函数定义:

int putchar(int ch);

函数调用:

例如:putchar('A');

3、getchar()与scanf()混合使用

在介绍该部分时,首先要明确缓冲区概念。

若干数据以数据块的形式发送效率比较高是缓冲区存在的意义。

(1)缓冲区

具体参照C primer plus(第五版)中文版P189页。

1)非缓冲

输入字符立即回显是非缓冲。回显的含义是:对正在等待的程序立即变成可用。

2)缓冲

    输入数据被存放在临时存储区中,按下回车键键入的字符对程序变成可用。

  • 完全缓冲

缓冲区满时被清空。

  • 行缓冲

遇到换行字符时清空缓冲区。键盘输入是标准的行缓冲,因此按下回车键将清空缓冲区。

(2)getchar()与scanf()混合使用

与scanf()不同,getchar()会读取每一个字符,包括空格、制表符和换行符。而scanf()则会跳过这些字符。因此两者不能很好的混合在一起用。

例如下面程序:

#include <stdio.h>
void display(char cr,int lines,int width)
{
    int row,col;
    for(row=1;row<=lines;row++)
    {
        for(col=1;col<=width;col++)
            putchar(cr);
        putchar('\n');
    }
}

int main()
{
    int ch;
    int rows,cols;
    while((ch=getchar())!='\n')
    {
        scanf("%d%d",&rows,&cols);
        display(ch,rows,cols);
    }
    return 0;
}<span style="color:#ff0000;">
</span>
由于scanf()将换行符留在输入队列当中,由于getchar()并不跳过换行符,在下一循环当中该换行符由getchar()读出,并赋给ch,而ch为换行符正是循环终止的条件。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值