fgets stdin fgets函数用法
大家好,关于fgets stdin很多朋友都还不太明白,今天小编就来为大家分享关于fgets函数用法的知识,希望对各位有所帮助!
fgets (buf, sizeof(buf), stdin);
fgets(buf, sizeof(buf), stdin);是从标准输入设备读入一行字符串,包括空白空格直到新行键,含新行键。字符串存放到 buf里。
sscanf(buf,"%i",&option);是从字符串buf的开始处,按整型读入一个数。
----------------------------------
可以用 scanf,直接读入一个整型数:
scanf("%i",&option);
但仍要清理掉一行中剩余的东西:
fflush(stdin);
否则,下面一个输入会错。
如果这行里剩余的东西要派别的用,就不能简单地用fflush(stdin);清除。
-----------------------
一般用fgets(buf, sizeof(buf), stdin);读一行内容存放起来,是为了输入一次,而多次应用。
C语言里为什么fgets很少用
因为fgets函数只能输入字符串,而Scanf()能输入多种类型的数据,加上一般的C语言教材往往重视讲授原理,而对程序健壮性、异常处理等考虑不多,所以一般资料很少提及fgets函数。
scanf在获取用户输入的字符串时,遇到空格、制表符即终止,并在结尾自动加上”\0″。gets在获取用户输入字符串时,遇到空格、制表符不会终止,在结尾也会自动加上“\0”。
由于scanf和gets这两个函数不对输入的长度进行核查,即使用户输入超过了规定的buffer容量,函数也会接受输入,造成缓冲区溢出,程序崩溃。所以建议实际使用时最好用fgets函数来替代。
附上fgets函数的有关说明:
fgets函数原型:char
*fgets(char
*buf,
int
bufsize,
FILE
*stream);
参数:
1.
*buf:
字符型指针,指向用来存储所得数据的地址。
2.
bufsize:
整型数据,指明存储数据的大小。即每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。
3.
*stream:
文件结构体指针,将要读取的文件流。如为stdin,则从键盘读取。
返回值:
成功,则返回第一个参数buf;
在读字符时遇到End-of-File,则EOF被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;如果发生读入错误,ERROR被设置,返回NULL,buf的值可能被改变。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
fgets函数用法
fgets函数功能为从指定的流中读取数据,每次读取一行。其原型为:char*fgets(char*str, int n, FILE*stream);从指定的流 stream读取一行,并把它存储在 str所指向的字符串内。
扩展资料:
一、函数原型是:char*fgets(char*s, int n, FILE*stream);
从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize-1个字符,则读完该行就结束。
如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。
函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
二、与gets相比使用这个好处是:读取指定大小的数据,避免gets函数从stdin接收字符串而不检查它所复制的缓存的容积导致的缓存溢出问题。
三、功能:
1、《UNIX环境高级编程》中指出,每次调用fgets函数会造成标准输出设备自动刷清!案例详见《UNIX环境高级编程(第二版)》中程序清单1-5和课后习题5.7,习题5.7的答案中给出了相关的论述。
2、初入门者,大多数是在WINDOWS下,使用VS进行练习的。此环境下,对注意1中的情况进行测试,并不能看到案例中所描述的情景,因为具体的实现不同。
文章到此结束,如果本次分享的fgets stdin和fgets函数用法的问题解决了您的问题,那么我们由衷的感到高兴!