C 库函数 - scanf():
功能:
scanf函数从标准输入 stdin 读取格式化输入。
和getchar类似,首先从stdin缓冲区读取字符,如果缓冲区有符合格式要求的数据,及获取数据,返回给程序,指针指向下一个数据,函数结束;如果缓冲区没有符合要求的数据,则等待从键盘输入数据,并且必须以回车键结束,输入的数据存入stdin缓冲区,然后scnaf()从缓冲区获取一个数据并返回,函数结束。
它被称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。即“通过键盘给程序中的变量赋值”。
头文件:
scanf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中,因此在使用scanf函数时要加上#include <stdio.h>。
一般形式:
scanf函数的一般形式为:scanf(“格式控制字符串”, 地址表列);
功能:将从键盘输入的字符转化为“格式控制字符串”所规定格式的数据,然后存入以地址表列的值为地址的变量中。
其中,格式控制字符串可以说明输入数据的类型。例如:
%d表示十进制整数(int *)、%s表示字符串(char *),这将读取连续字符,直到遇到一个空格字符(空格字符可以是空白、换行和制表符)。
地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。例如:&a、&b分别表示变量a和变量b的地址。scanf函数在本质上也是给变量赋值,但要求写变量的地址。
说明:
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
返回值:
如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。
C 库函数 - getchar():
功能:
int getchar()从标准输入 stdin 获取一个字符(一个无符号字符)。这等同于 getc 带有 stdin 作为参数:getc(stdin)。getchar()非真正函数,而是getc(stdin)宏定义。
getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)。所以可以用getchar来清除scanf留在缓冲区中的回车。
当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符,且将用户输入的字符回显到屏幕。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。
头文件:
使用getchar函数时要加上#include <stdio.h>。
返回值:
该函数以无符号 char 强制转换为 int 的形式返回读取的字符。
返回类型为int型,为用户输入的ASCII码或EOF。
如果到达文件末尾或发生读错误,则返回 EOF。
getch:
功能:
从stdio流中读取一个字符,不显示在命令行(不回显),很多人用来模拟“按任意键继续的效果”。
当用户按下某个字符时,函数自动读取,无需按回车。
原型:
int getch(void)
头文件:
#include <conio.h>
和getchar区别:
getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCⅡ码,出错返回-1。
输入的字符不会回显在屏幕上。
getch()是非缓冲输入函数,就是不能用getch()来接受缓冲区已存在的字符。
说明:
getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行。
返回值:
getch返回值是用户输入的ASCⅡ码,出错返回-1。
getche:
功能:
getche()读取从控制台输入的字符,并将输入的字符立即显示在控制台。
也就是说,输入d,直接就输出d,不需要按回车键,即该函数不带缓冲区,且输入有回显。
原型:
int getche(void);
头文件:
#include <conio.h>
说明:
和getch一样,这两个函数经常用于交互输入的过程中完成暂停等功能。
返回值:
从控制台读取字符,并在控制台显示读取的字符ASCII码值。
getchar(),getch(),getche()比较:
相同点:
1.都不需要参数
2.功能一致:从输入设备获取一个字符并返回这个字符
不同点:
1.getchar()先将输入的字符保存在缓冲区,然后再从缓冲区读取这个字符,是间接读取
2.getche()和getch()不需要将输入的字符保存在缓冲区,而是即输即取,也就是说,一输入一个字符,它立即直接读取
getchar() 会等待用户按下回车键才开始读取,而 getche()、getch() 会立即读取。这是因为 getchar() 带有缓冲区,用户输入的数据会暂时保存到缓冲区,直到按下回车键才开始读取;而 getche()、getch() 不带缓冲区,只能立即读取。
gets:
功能:
char* gets(char* buffer)
从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。