【C 语言基础】get四子——getc()、getchar()、getch() 和 getche() 的区别

【C 语言基础】get四子——getc()、getchar()、getch() 和 getche() 的区别

简短不看版:

所有这些函数都从输入中读取一个字符并返回一个整数值。返回整数以容纳用于指示失败的特殊值。EOF值通常用于此目的。

getc(FILE *) ,参数可以指定文件,也可以是标准输入stdin。

getchar() 相当于 getc(stdin)

getch() 和 getche() 从stdin 读取,但是不使用缓存。

C语言 get四子

1. getc()

它从给定的输入流中读取单个字符,并在成功时返回相应的整数值(通常是读取字符的ASCII值)。失败时返回EOF。 语法:

int getc(FILE *stream);

示例:

// Example for getc() in C

#include

int main()

{

printf("%c", getc(stdin));

return(0);

}

输出:

Input: g (press enter key)

Output: g

2. getchar()

getc() 和 getchar() 之间的区别是 getc() 可以从任何输入流读取,但是 getchar() 只能从标准输入流读取。因此 getchar() 等价于 getc(stdin)。 语法:

int getchar(void);

示例:

// Example for getchar() in C

#include

int main()

{

printf("%c", getchar());

return 0;

}

输出:

Input: g(press enter key)

Output: g

3. getch()

getch() 是一个非标准函数,存在于 conio.h 头文件中,该文件主要由 MS-DOS 编译器(如 Turbo C)使用。它不是 C 标准库或 ISO C 的一部分,也不是由 POSIX 定义的。 与上述函数一样,它也从键盘读取单个字符。 但它不使用任何缓冲区,因此输入的字符会立即返回,无需等待回车键。 语法:

int getch();

示例:

// Example for getch() in C

#include

#include

int main()

{

printf("%c", getch());

return 0;

}

输出:

Input: g (Without enter key)

Output: Program terminates immediately.

But when you use DOS shell in Turbo C,

it shows a single g, i.e., 'g'

4. getche()

与 getch() 一样,这也是conio.h中的一个非标准函数。它从键盘读取单个字符,并立即显示在输出屏幕上,而无需等待回车键。 语法:

int getche(void);

示例:

#include

#include

// Example for getche() in C

int main()

{

printf("%c", getche());

return 0;

}

输出:

Input: g(without enter key as it is not buffered)

Output: Program terminates immediately.

But when you use DOS shell in Turbo C,

double g, i.e., 'gg'

扩展:fgetc、getc与fputc、putc的功能与区别

fgetc与getc的功能

这两个函数的功能都是从指定的流中获取字符。

fgetc函数原型:int fgetc(FILE *stream)

getc函数原型: int getc(FILE *stream)

fputc与putc的功能

这两个函数的功能都是将指定的字符输入到指定的流中

fputc函数原型:int fputc(int c, FILE *stream)

putc函数原型:int putc(int c, FILE *stream)

其中c表示指定的字符对应的ASCII吗值,stream表示指定的流

区别

从表面上看,fgetc和getc的功能相同,fputc和putc的功能相同,那他们的区别在哪里呢?

注意:fgetc和fputc本质上函数,而getc和putc本质上是宏!

更细的区别有以下三个:

调用宏(getc、putc)时,宏的参数不能是有副作用的表达式。有副作用的表达式,指的是表达式执行后,会改变表达式中某些变量的值,如++i。

函数可以获取其地址,并将其赋值给函数指针,而宏不可以获取地址。

调用宏的效率要高于调用函数。

转载参考

1. cnblogs: https://www.cnblogs.com/octobershiner/archive/2011/12/08/2281240.html

2 csdn: https://blog.csdn.net/weixin_43908419/article/details/128173476

相关推荐

地狱边境通关攻略23(地狱边境攻略23关)
必发365娱乐在线官网

地狱边境通关攻略23(地狱边境攻略23关)

📅 07-01 👁️ 1629
在Word中旋转或翻转文本框、形状、艺术字或图片
全球最大体育平台365

在Word中旋转或翻转文本框、形状、艺术字或图片

📅 07-09 👁️ 262
口罩研发用什么软件
必发365娱乐在线官网

口罩研发用什么软件

📅 07-15 👁️ 1934