C 语言中 getch()、getche()、getc()、getchar()、gets()、fgetc()、fgets() 的区别与使用

getch()getche()getc()getchar()gets()fgetc()fgets()为C语言中七个常用且相似的字符与字符串处理函数。


一、getch

int getch(void) 会从标准输入读取字符,不带回显,不需要换行符。conio.h 头文件并非C标准库中的头文件,因此默认情况下对应函数只能在Windows环境下使用。

#include <stdio.h>
#include <conio.h>

int main() {
	printf("please input letter with getch():");
	printf("\ngetch():%c\n", getch());
	
	return 0;
}
PS C:\Users\atreus\Documents\Code> g++ main.cpp -o main
PS C:\Users\atreus\Documents\Code> ./main            
please input letter with getch():
getch():c
PS C:\Users\atreus\Documents\Code> 

二、getche

int getche(void) 会从标准输入读入一个字符,带回显,不需要换行符。

#include <stdio.h>
#include <conio.h>

int main() {
	printf("please input letter with getche():");
	printf("\ngetche():%c\n", getche());
	
	return 0;
}
PS C:\Users\atreus\Documents\Code> g++ main.cpp -o main
PS C:\Users\atreus\Documents\Code> ./main
please input letter with getche():c
getche():c
PS C:\Users\atreus\Documents\Code> 

三、getc

int getc(FILE *stream) 会从指定的流stream获取一个字符,程序等待输入时,缓冲区可以输入多个字符,换行符表示输入结束,但函数只会读取第一个字符。

#include <stdio.h>

int main() {
	printf("please input letter with getc():");
	printf("getc():%c\n", getc(stdin));
	
	return 0;
}
atreus@AtreusMBP 18:44 code % g++ main.cpp -o main
atreus@AtreusMBP 18:44 code % ./main              
please input letter with getc():ccc 
getc():c
atreus@AtreusMBP 18:44 code % 

四、getchar

int getchar(void) 会从标准输入读取字符,等同于 getc() 带有stdin作为参数。

#include <stdio.h>

int main() {
	printf("please input letter with getchar():");
	printf("getchar():%c\n", getchar());
	
	return 0;
}
atreus@AtreusMBP 18:44 code % g++ main.cpp -o main
atreus@AtreusMBP 18:44 code % ./main              
please input letter with getchar():ccc
getchar():c
atreus@AtreusMBP 18:44 code % 

五、gets

char *gets(char *str) 会从标准输入stdin读取一行,并把它存储在str所指向的字符串中,当读取到换行符会停止并丢弃换行符,类似于 scanf("%[^\n]%*c", str);

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 10

int main() {
    char *str = (char *) malloc(MAX_SIZE * sizeof(char));

    printf("please input string with gets():");
    gets(str); // 类似于scanf("%[^\n]%*c", str);

    char c = getchar(); // 程序会在这里等待输入

    printf("gets():%s\n", str);

    free(str);
    return 0;
}
atreus@AtreusMBP 18:48 code % g++ -w main.cpp -o main           
atreus@AtreusMBP 18:48 code % ./main
warning: this program uses gets(), which is unsafe.
please input string with gets():ccc

gets():ccc
atreus@AtreusMBP 18:48 code % 

六、fgetc

int fgetc(FILE *stream) 会从指定的流stream获取一个字符,fgetc()getc() 最大的区别在前者是函数,后者是宏,所以 getc() 的参数不能是有副作用的表达式(即表达式的执行会改变表达式中的变量的值,如 i++)。

#include <stdio.h>

int main() {
	printf("please input letter with fgetc():");
	printf("fgetc():%c\n", fgetc(stdin));
	
	return 0;
}
atreus@AtreusMBP 18:49 code % g++ main.cpp -o main
atreus@AtreusMBP 18:49 code % ./main                 
please input letter with fgetc():ccc
fgetc():c
atreus@AtreusMBP 18:49 code % 

七、fgets

char *fgets(char *str, int n, FILE *stream) 会从指定的流stream读取一行,并把它存储在str所指向的字符串内,当读取n-1个字符或者读取到换行符时,再或者到达文件末尾时,停止读取。

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 10

int main() {
    char *str = (char *) malloc(MAX_SIZE * sizeof(char));

    for (int i = 0; i < 10; i++) {
        str[i] = '#';
    }

    printf("please input string with fgets():");
    if (fgets(str, 3, stdin) != NULL) {
        printf("fgets():%s\n", str);
    }

    free(str);
    return 0;
}
atreus@AtreusMBP 18:51 code % g++ main.cpp -o main
atreus@AtreusMBP 18:51 code % ./main              
please input string with fgets():ccc
fgets():cc
atreus@AtreusMBP 18:51 code % 

在这里插入图片描述

  • 8
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值