C 语言 getc(), getchar(), getch() 和 getche() 的区别2025年5月11日 | 阅读 6 分钟 在本文中,我们将讨论C语言中getc()、getchar()、getch()和getche()之间的区别。作为C编程语言的基本组成部分,输入处理是一个非常重要的现象,并且有各种函数,如getc()、getchar()、getch()和getche()用于从源读取字符。所有这些函数都有特定的用例行为、物理用途和实现。以下是这些函数的一个详细比较。 1. 函数概述getc() - 定义:getc()函数是在<stdio.h>中实现的常用类型库函数。它只能从给定的输入流中读取一个字符,所以必须先有一个输入流。
- 语法:int getc(FILE *stream);
getchar() - 定义:getchar()是一个代理函数,用于从标准控制台或输入设备读取字符。
- 语法:int getchar(void);
getch() - 定义:getch()函数是一个已存在的函数,但不是标准的,并且优先用于DOS和Windows环境。它以字符形式执行getch函数,直接从键盘获取字符而不将其显示在屏幕上。
- 语法:int getch(void);
getche() - 定义:它与getch()类似,但getche()会在输入字符后立即将其显示在屏幕上。
- 语法:int getche(void);
2. 详细比较输入源 - getc():它可以从任何指定的输入流读取,该流可以是文件或标准输入。这使得在文件I/O操作中能够适应各种输入需求。
- getchar():它用于读取标准输入。这是一个更简单的接口,从中读取输入的是键盘。
- getch():直接从键盘缓冲区检索其信息。它不依赖于按下Enter键,这使得它非常适合应用程序或网页捕获用户的首次输入。
- getche():与readkey一样,它也从键盘缓冲区读取,但不是以“>”的形式,而是直接将字符打印到控制台窗口。当用户在输入过程中需要反馈时,它很有用。
回显行为 - getc():它不会回显输入,字符在控制台上读取时不会显示。
- getchar():与getc()一样,它也没有回显。它只显示字符,并等待用户按下Enter键,然后才继续返回字符。
- getch():不回显;字符是静默读取的。这对于密码输入以及命令行提示符非常有用,因为不应该显示用户的输入。
- getche():它会记录并立即将字符在控制台上播放出来,就像输入一样。这在用户输入时需要看到自己输入内容的应用程序中很有用。
缓冲 - getc():读取文件时是全缓冲的,这意味着流会将一部分内容读入缓冲区,然后使用这些字符进行处理。这将提高文件I/O的性能。
- getchar():从stdin读取时是行缓冲的,这意味着它在按下Enter键后才等待输入。由于输入不是自动获取的,因此可能需要一些时间才能完成。
- getch():它调用read方法,该方法从键盘读取字符而不等待换行符。这使得交互式工作和即时响应用户输入成为可能。
- getche():它也是非缓冲的,会在输入时回显字符。这意味着我们可以获得即时反馈。
返回值 - getc():将读取的字符转换为整数,然后返回。如果读取过程中遇到文件末尾或发生错误,它将返回EOF,通常设置为-1。
- getchar():与getc()函数一样,getchar()函数将下一个字符读取为int,并返回EOF表示没有输入或发生了错误。
- getch():将读取的字符转换为整数。它不返回EOF,因为它的设计目的不是扫描文件流。
- getche():函数与getch()类似,返回键入的字符而不返回EOF。但是,它不适用于流。
3. 用例- getc():它旨在允许从文件或流中读取字符,这在缓冲输入中是理想的。它有助于在文件处理应用程序中使用,例如逐字符读取配置文件、文本文件等。
- getchar():它用于小型控制台应用程序,这些应用程序只想从标准输入中获取一个字符。它们非常适合用于选择菜单选项或非常简单的交互式选择。
- getch():它经常用于需要立即获取用户输入的情况,例如在游戏或任何需要对键盘命令(除了Enter键)做出即时响应的程序中。
- getche():它在需要即时响应的情况下很有用,例如在用户输入密码字符时显示它们,但之后可以将其隐藏。
4. 可移植性- getc() 和 getchar():它们都来自C标准库,可以在支持C的任何平台上工作。
- getch() 和 getche():这些函数是某些特定编译器提供的,例如Turbo C和某些版本的GCC。它们可能在公司运营的所有环境中都不可用,这使得它们的便携性较差。
C语言中getc()、getchar()、getch()和getche()之间的主要区别 C语言中的getc()、getchar()、getch()和getche()之间有几个主要区别。一些主要区别如下: 特点 | getc() | getchar() | getch() | getche() |
---|
头文件 | <stdio.h> | <stdio.h> | <conio.h> | <conio.h> | 目的 | 一个从文件或流中读取单个字符的函数。 | 它从输入流(即键盘)中读取单个字符。 | 它允许对键盘进行阻塞式读取单个字符,这样就不会回显。 | 从键盘输入单个字符并打印接收到的字符。 | 输入源 | 任何自同义文件,即操作系统级别文件(如stdin或文件指针)。 | 标准输入 (stdin)。 | 直接键盘输入。 | 直接键盘输入。 | 屏幕回显 | 是的 | 是的 | 是的 | 是的 | 缓冲 | 受管理(第一行等待Enter键,第二行回显)。 | 它将缓冲等待Enter键。 | 不提供输入最后一行保护,而是非缓冲的。 | 非缓冲(无需按Enter键)。 | 返回值 | int(字符的ASCII值) | int(字符的ASCII值) | int(字符的ASCII值) | int(字符的ASCII值) | 输入源 | 任何文件或输入流(例如 stdin,文件指针)。 | 标准输入 (stdin)。 | 直接键盘输入。 | 直接键盘输入。 | 屏幕回显 | 是的 | 是的 | 是的 | 是的 | 缓冲 | 缓冲(等待Enter键)。 | 缓冲(等待Enter键)。 | 非缓冲(无需Enter键)。 | 非缓冲(无需Enter键)。 | 范围 | 文件I/O和标准输入。 | 仅限于标准输入。 | 仅限于键盘输入。 | 仅限于键盘输入。 | 错误指示 | 在发生错误或到达文件末尾时返回EOF。 | 返回值:计算错误或输入结束时返回EOF。 | 它不涉及错误信号,但它确实表明输出有问题。 | 它不明确指示错误。 | 可移植性 | 标准且可移植。 | 标准且可移植。 | 非标准(仅适用于Windows或DOS)。 | 特定于Windows/DOS的非标准。 | 用例 | 一种从文件或流中读取字符的方法。 | 从标准输入读取输入字符。 | 例如密码,读取时不会打印。 | 读取能对用户行为提供即时响应的字符。 |
结论总之,在C语言中使用getc()、getchar()、getch() 或 getche()的决定取决于特定的代码和环境。因此,getc() 可用于从文件或流中读取字符,并且通常在文件I/O中使用,它是标准C库的一部分并且可移植。getchar() 用于标准输入,对于拥有少量用户输入的C控制台应用程序很常见。相比之下,getch() 和 getche() 是非标准函数,特别用于Windows/DOS环境中进行不回显的键盘输入。确切地说,getch() 函数读取输入字符但不在屏幕上显示,非常适合受限输入,如密码。另一方面,getche() 函数会回显输入以进行即时显示,最适合交互式程序。因此,最便携且符合标准的实用函数是getc()和getchar(),而最适合开发人员希望程序能够即时输入的特定环境的实用函数是getch()和getche()。
|