getchar,gets,fgets,scanf的用法与区别

首先,四个函数都可以从标准输入(键盘)读取字符串,并存储到指定内存空间(变量)中。

1、int getchar(void)

功能:返回从标准输入的下一个字符。

参数:无。

返回值:字符作为一个int型值被返回。

getchar只得到第一个输入的字符,’\n’及多余字符会留在缓存区

《getchar,gets,fgets,scanf的用法与区别》
《getchar,gets,fgets,scanf的用法与区别》

执行上面的代码,可以发现第二个getchar()没有等待用户输入,直接接收了缓存区里的’\n’。

2、char *gets(char *str)

功能:从标准输入获取string。

参数:str ,指向用来存取C string的buffer的指针。

返回值:成功,返回str字符串;失败,返回NULL指针。

gets不接收’\n’,并在字符串末尾自动追加’\0’,缓存区’\n’会被清除。

输入字符串长度超过buffer,会有溢出错误。

《getchar,gets,fgets,scanf的用法与区别》

《getchar,gets,fgets,scanf的用法与区别》

执行上面的代码,可以发现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’会留在缓存区

《getchar,gets,fgets,scanf的用法与区别》

《getchar,gets,fgets,scanf的用法与区别》

%s和%d之间必须要有空格,键盘输入时两个变量之间也相应的输入空格。否则只有第一个变量接收数据,第二个变量出现赋值错误。