C语言中 gets 和 getchar 有什么区别:
gets函数是输入一行字符串,以回车结束,并且回车键会被过滤掉,不会被读到字符串中,而getchar函数是读取一个字符,包括回车键也会被读成一个字符。
函数原型:char * gets(char * ptr);int getchar(void);
函数用法:
- gets()用于从标准输入流stdin读入一个整行(以’\n’或EOF)结束,写入ptr指向的字符数组,并返回这个指针;出错或遇到文件结束时则返回NULL。行末的’\n’从流中取出,但不写入数组。gets()不检查被写入的数组大小。
- getchar()用于从标准输入流stdin读入一个字符,并返回这个字符。如果读到文件结尾,则返回EOF。注意到EOF不能用char类型表示,所以getchar()函数返回的是一个int型的数。使用时也应该注意这一点。
其他区别:
scanf和gets区别:
scanf:它遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。
而gets则只认为回车符才是输入结束。
相同的地方是:在字符串接受结束后都自动加’\0’。
说白了:
scanf :当遇到回车,空格和tab键会自动在字符串后面添加’\0’,但是回车,空格和tab键仍会留在输入的缓冲区中。下次如果调用会直接先拿缓冲区中的数据。
其实也可以清空,编译器提供了清空缓冲区函数,fflush(stdin);
gets:可接受回车键之前输入的所有字符,并用’\n’替代 ‘\0’.回车键不会留在输入缓冲区中
其实就是gets函数在读取字符串时将删除结尾的换行符。
getchar和getch区别:
getchar:它有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).
getch:只要用户按一个键,getch就立刻返回, getch返回值是用户输入的ASCII码,出错返回-1.输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行.
补充:
gets,getc,区分C语言中fgetc、getc、getchar、fgets、gets:
https://blog.csdn.net/weixin_30590615/article/details/117101223