【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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
#include <conio.h>
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 <stdio.h>
#include <conio.h>
// 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函数原型: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

posted @ 2023-12-31 16:56  FBshark  阅读(517)  评论(0编辑  收藏  举报