首先,四个函数都可以从标准输入(键盘)读取字符串,并存储到指定内存空间(变量)中。
1、int getchar(void)
功能:返回从标准输入的下一个字符。
参数:无。
返回值:字符作为一个int型值被返回。
getchar只得到第一个输入的字符,’\n’及多余字符会留在缓存区
执行上面的代码,可以发现第二个getchar()没有等待用户输入,直接接收了缓存区里的’\n’。
2、char *gets(char *str)
功能:从标准输入获取string。
参数:str ,指向用来存取C string的buffer的指针。
返回值:成功,返回str字符串;失败,返回NULL指针。
gets不接收’\n’,并在字符串末尾自动追加’\0’,缓存区’\n’会被清除。
输入字符串长度超过buffer,会有溢出错误。
执行上面的代码,可以发现hello没有换行,说明’\n’没有被接收。getchar()正在等待用户输入,说明缓存区已清空。
3、char *fgets(char *str, int num, FILE *stream)
功能:从stream中读取字符,并作为C string存入到str中。
参数:
str: 指向用来存放string的char数组的指针
num:被读取的最大字符数目(包括’\0’字符),通常用str数组的长度
stream:指针,指向一个FILE对象,fgets从这个对象中读取字符。
返回值:成功,返回str字符串;失败,返回NULL指针。
gets接收’\n’,并在字符串末尾自动追加’\0′
第三个参数输入stdin,可用于读取标准输入
4.int scanf(const char *format, …)
功能:从标准输入读取数据,动态为某些变量赋值。
参数:根据需要赋值的变量类型决定。
返回值:成功:正整数;失败:-1。
scanf遇到空格、回车和Tab键都会认为输入结束,’\n’会留在缓存区
%s和%d之间必须要有空格,键盘输入时两个变量之间也相应的输入空格。否则只有第一个变量接收数据,第二个变量出现赋值错误。