C语言中的getchar()

scanf():在读取单个字符是,会受缓冲区残留换行干扰,面对此问题,可通过getchar()解决。下面详细介绍一下getchar这个函数。

getchar()是C标准库函数,是stdio.h标准库提供的字符读取函数,作用是从标准输入(键盘缓冲区)读取1个字符。C++为兼容C也可以直接使用,Python、Java等高级语言没有这个函数。

1、读取规则

键盘输入不是立刻被读取,先存入缓冲区

输入字符,按下回车Enter后,所有字符(包括回车换行符\n)才进入缓冲区

getchar()每次只拿缓冲区最前面的一个字符

缓冲区有数据时,不需要重新键盘输入,直接读取缓存里剩余字符。

c 复制代码
#include<stdio.h>
#include<windows.h>
int main(int argc, char const *argv[])
{
    /* code */
    SetConsoleOutputCP(65001);
    SetConsoleCP(65001);
    char c;
    scanf("%d",&c);
    char ch = getchar();
    putchar(ch);
    return 0;
}

运行结果:

2、常见的用途

(1)读取单个键盘字符

(2)清空输入缓冲区--解决scanf残留问题

如下未使用getchar

c 复制代码
#include<stdio.h>
#include<windows.h>
int main(int argc, char const *argv[])
{
    /* code */
    SetConsoleOutputCP(65001);
    SetConsoleCP(65001);
    char c[3];
    for(int i = 0;i<3;i++){
        scanf("%c",&c[i]);
    }

    for(int i = 0;i<3;i++){
        printf("%c ",c[i]);
    }
    return 0;
}

运行结果:

当增加了getchar后可吸收空格字符或换行符

也可以使用scanf(" %c")先自动跳过所有空白,只接收可见字符,处理交互式字符,如下:

(3)循环读取一整行全部字符

c 复制代码
#include<stdio.h>
#include<windows.h>
int main(int argc, char const *argv[])
{
    /* code */
    SetConsoleOutputCP(65001);
    SetConsoleCP(65001);
    char c;
    scanf("%d",&c);
    int ch;
    while ((ch = getchar())!='\n'&& ch!=EOF)
    {
        putchar(ch);
    }
    return 0;
}

运行结果:

注意:返回值是int,不是char

正常读取到字符(返回该字符的ASCII码值(0-127,正数))

读到文件末尾、输入结束:返回常量EOF(值为-1,char通常是无符号范围是0-255,存不下-1,所以返回值必须用int接收)

相关推荐
小π军1 分钟前
C 和 C++ 是否都支持函数的重载?
java·c语言·c++
ESDWAN15 分钟前
海外股票网络环境优化与交易场景应用:从行情获取到交易系统稳定性设计
开发语言·网络·php
西柚不烦恼18 分钟前
jenkins版本和java版本的依赖
java·开发语言·jenkins
stellanke22 分钟前
工业化C++:3. 继承、虚函数与运行时多态:从水果加工到日志策略设计
开发语言·c++
Matlab程序猿27 分钟前
【MATLAB源码-第460期】基于matlab的OTFS通信系统SLM峰均比抑制及非线性功率放大器失真与误码性能仿真
开发语言·算法·matlab·slm·otfs
kimnoic30 分钟前
Python变量与数据类型全解析(最新整理)
开发语言·python
豆角焖肉36 分钟前
SpringBoot+JWT 实现前后端分离登录鉴权
java·开发语言·spring boot·jwt·前后端分离·登录认证
Wang's Blog1 小时前
Java 项目部署之 Docker工具快速入门: 自定义镜像的分层结构与写时复制
java·开发语言·docker
kimnoic9 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
必须得开心呀10 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python