因为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函数来判断。
//用函数fputs写入时,可以通过写入\n或\r\n来写入换行符,但fputs不会自动在字符串的末尾追加换行符。
//函数fgets的原型是:char* fgets(char *str,int num,FILE *stream)。
//用函数fgets读取时,会从给出的文件流stream中读取[num - 1]个字符,
//并把它们转储到str(字符串)中, 但如果在读到[num - 1]个字符之前遇到了第一个换行符,
//会提前结束,并将换行符之前的字符连同这个换行符转储到str(字符串)中。
//下面有例子。
#includestdio.h
#includestdlib.h
#includestring.h
int main()
{
char f[]="t.txt",buf[1024]={'\0'};
FILE *io=fopen(f,"w");
fputs("第一行",io);
fputs(",还是第一行\n",io);
fputs("第二行\r\n",io);
fputs("第三行\n",io);
fputs("hello\nworld",io);
fclose(io);
io=fopen(f,"r");
fgets(buf,1024,io);
fclose(io);
puts(buf);
if('\n'==buf[strlen(buf)-1])
{
puts("读到了换行符。");
}
else
{
puts("未读到换行符。");
}
system("PAUSE");
return 0;
}
fgets为stdin.h头文件中声明的,从文件中读取字符串的函数。
原型:
char *fgets(char *buf, int bufsize, FILE *stream);
参数:
buf: 指向用来存储字符串的内存位置。
bufsize: 读取数据的大小。
stream: 将要读取的文件流。
fgets最多从文件中读取bufsize-1个字符,若读取的行不足bufsize-1个字符,则读取完这行后就结束;若读取的行超过bufsize-1个字符,则只读取bufsize-1个字符,下次调用fgets时,将从此行未读取完的位置继续读取。
示例:
#include stdio.h
int main()
{
char s[60];
FILE *fin = fopen("a.txt", "r");
fgets(s, 60, fin);
puts(s);
fclose(fin);
return 0;
}
fgets函数功能为从指定的流中读取数据,每次读取一行。其原型为:char *fgets(char *str, int n, FILE *stream);从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止。
楼主没有说清具体要执行的规则,只有一个例子。如果是固定的第一行以及从此行中截取前三个字符为一行,这就比较容易处理。
下面是程序的代码和文件内容以及运行截图:
#include
int main()
{ FILE *fp;
char s[300];
fp=fopen("test.txt","r");
fgets(s,4,fp);
printf("%s\n",s);
while(!feof(fp))
{ fgets(s,300,fp);
printf("%s",s);
}
return 0;
}