C语言函数的使用——读取字符的函数

本文来源:C语言函数的使用——读取字符的函数


在C语言里,getcgetchargetchgetche 以及 scanf("%c", &ch) 都能用于字符输入,但在功能、使用场景、行为和标准性上存在差异,下面是它们的比较:

1. getc

  • 标准库函数:是
  • 头文件<stdio.h>
  • 函数原型int getc(FILE *stream);
  • 功能:从指定的输入流中读取一个字符。
  • 返回值:返回读取字符的 ASCII 码值(转换为 int 类型);若到达文件末尾或出错,返回 EOF(通常为-1)。
  • 特点:需指定输入流,对标准输入可用 stdin。读取字符后会从输入缓冲区移除。
  • 使用场景:常用于从文件读取字符,也能用于标准输入。
  • 示例代码
#include <stdio.h>

int main() {
    int ch;
    printf("请输入一个字符: ");
    ch = getc(stdin);
    printf("你输入的字符是: %c\n", ch);
    return 0;
}

2. getchar

  • 标准库函数:是
  • 头文件<stdio.h>
  • 函数原型int getchar(void);
  • 功能:从标准输入流 stdin 读取一个字符。
  • 返回值:与getc类似,返回读取的字符的ASCII码值(转换为 int 类型),如果到达文件末尾或发生错误,则返回 EOF
  • 特点:读取字符后从输入缓冲区移除,需按回车键将输入字符送入缓冲区。
  • 使用场景:常用于简单的字符输入操作。
  • 示例代码
#include <stdio.h>

int main() {
    int ch;
    printf("请输入一个字符: ");
    ch = getchar();
    printf("你输入的字符是: %c\n", ch);
    return 0;
}

3. getch

  • 标准库函数:不是
  • 头文件<conio.h>(非标准,通常用于Windows,其他操作系统一般不支持)
  • 函数原型int getch(void);
  • 功能:从键盘读取一个字符,但不回显到屏幕,无需按回车键。
  • 返回值:返回读取字符的 ASCII 码值。
  • 使用场景:适用于需立即响应按键输入的场景,如游戏开发。
  • 特点:输入字符不回显,且不放入输入缓冲区。
  • 示例代码
#include <stdio.h>
#include <conio.h>

int main() {
    int ch;
    printf("请输入一个字符: ");
    ch = getch();
    printf("\n你输入的字符是: %c\n", ch);
    return 0;
}

4. getche

  • 标准库函数:不是
  • 头文件<conio.h>(非标准,通常用于Windows,其他操作系统一般不支持)
  • 函数原型int getche(void);
  • 功能:直接从控制台读取一个字符,无需按回车键,且输入字符会回显。
  • 返回值:返回读取字符的 ASCII 码值。
  • 使用场景:适用于需立即响应按键输入且要显示输入字符的场景。
  • 特点:输入字符会回显,不放入输入缓冲区。
  • 示例代码
#include <stdio.h>
#include <conio.h>

int main() {
    int ch;
    printf("请输入一个字符: ");
    ch = getche();
    printf("\n你输入的字符是: %c\n", ch);
    return 0;
}

5. scanf("%c", &ch)

  • 标准库函数:是
  • 头文件<stdio.h>
  • 函数原型int scanf(const char *format, ...);
  • 功能:按指定格式从标准输入流 stdin 读取数据,这里是读取一个字符存到变量 ch 中。
  • 返回值:返回成功匹配并赋值的输入项数量;若出错或到达文件末尾,返回 EOF
  • 特点:使用格式化字符串"%c"来读取字符。如果输入流中有空白字符(如空格、换行符等),scanf会跳过这些空白字符,只读取下一个非空白字符。需按回车键将输入字符送入缓冲区,输入缓冲区的其他字符(如换行符)可能影响后续输入。
  • 使用场景:可读取多种类型数据,格式字符串为 "%c" 时用于读取字符。
  • 示例代码
#include <stdio.h>

int main() {
    char ch;
    printf("请输入一个字符: ");
    scanf("%c", &ch);
    printf("你输入的字符是: %c\n", ch);
    return 0;
}

总结

  • 标准库函数getcgetcharscanf("%c", &ch) 是标准库函数,定义在 <stdio.h> 中,具有良好的跨平台兼容性。
  • 非标准库函数getchgetche 是非标准库函数,通常依赖于特定平台(如Windows的 <conio.h>),在跨平台开发中需要特别注意。
  • 功能差异
    • getcgetchar 用于从标准输入或文件中读取字符,可以读空白字符。
    • scanf("%c", &ch) 会跳过空白字符,只读取非空白字符。
    • getchgetche 提供了特殊的输入行为(不回显或回显),但不具有跨平台性。
    • getcharscanf("%c", &ch) 会回显输入的字符,getch 不会回显,getche 会回显。
  • 用途getc 可以从任意文件流读取字符,而 getcharscanf("%c", &ch) 通常用于从标准输入读取字符。
函数头文件输入流回显缓冲区处理适用场景标准性
getc<stdio.h>可指定移除读取字符文件或标准输入读取标准库函数
getchar<stdio.h>标准输入移除读取字符简单字符输入标准库函数
scanf("%c", &ch)<stdio.h>标准输入受缓冲区影响多种类型数据输入标准库函数
getch<conio.h>控制台不放入缓冲区立即响应且不显示输入非标准库函数
getche<conio.h>控制台不放入缓冲区立即响应且显示输入非标准库函数

关于scanf函数读取字符的补充说明

    1. 用"%c"格式字符控制输入时,用户从键盘输入的每个字符都被输入变量接收。例如:假设a是char型变量,执行语句:scanf(“%c”,&a);
      如果用户输入字符’1’后再输入回车键,则变量a的值是’1’。如果用户直接输入回车键,则a的值是回车符’\n’。
    1. 当用多个"%c"格式字符输入字符时,多个"%c"格式控制符之间常用逗号或空格分隔,也可以不加任何符号。例如:假设a、b和c是char型变量,若要使变量a、b和c的值分别为字符’x’、‘y’、‘z’,那么,如果执行语句:
      scanf(“%c%c%c”,&a,&b,&c); // %c之间没有分隔符
      用户只能输入xyz↙。
      如果执行语句:
      scanf(“%c,%c,%c”,&a,&b,&c); // %c之间用逗号分隔
      用户可输入x,y,z↙。
      如果执行语句:
      scanf(“%c %c %c”,&a,&b,&c); // %c之间用空格分隔
      在输入时,用户可以输入x y z↙。x、y、z之间可以有一个或多个空白字符。
    1. 当使用多个scanf( )函数连续给多个字符型变量赋值时,例如:
      scanf(“%c”,&c1);
      scanf(“%c”,&c2);
      若要让变量c1的值为’A’,c2的值为’B’,则正确的输入方法是:AB↙,而非A↙B↙。因为,当输入A↙B↙时,语句“scanf(“%c”,&c1);”读取键盘缓冲区中的字符’A’赋值给变量c1;紧接着语句“scanf(“%c”,&c2);”读取键盘缓冲区中的字符’\n’赋值给变量c2。
      如果将上面两行语句改成如下形式,以上两种输入方式均可接收。
      scanf(“\n%c”,&c1);
      scanf(“\n%c”,&c2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lhw---9999

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值