fgets用法,fgets函数用法
fgets用法,fgets函数用法详细介绍
本文目录一览: 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中的情况进行测试,并不能看到案例中所描述的情景,因为具体的实现不同。
求教c语言中fgets的用法
从流中读一行或指定个字符,原型是char*fgets(char*s,intn,FILE*stream);从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。
形参注释:*string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针fgets的返回值是个指针,*fgets(buffer,100,stdin)就是取返回指针所指向地址的第一个字符,fgets的返回值是char*.要是输入一串字符,返回的第一字符一定不是\n如果要是一个空行,第一个一定是\n,所以会推出循环,如果while中的两个条件都满足,就会进入循环继续计算。
扩展资料:
从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize-1个字符,则读完该行就结束。
如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。
函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
函数原型
char *fgets(char *buf, int bufsize, FILE *stream);
参数
*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。
*stream: 文件结构体指针,将要读取的文件流。
返回值
成功,则返回第一个参数buf;
在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;
如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。
参考资料:百度百科——c语言fgets用法
从流中读一行或指定个字符,
原型是char *fgets(char *s, int n, FILE *stream);
从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。
形参注释:*string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针
fgets的返回值是个指针,*fgets(buffer, 100, stdin)就是取返回指针所指向地址的第一个字符,fgets的返回值是char *.要是输入一串字符,返回的第一字符一定不是\n如果要是一个空行,第一个一定是\n,所以会推出循环,如果while中的两个条件都满足,就会进入循环继续计算
写数据你用fprintf(fp,"格式描述符",要写的变量的地址);
fp是你的文件的指针
FILE *fp;
读的话用fscanf(fp,"格式描述符",要写的变量的地址);
其他的还有fputs();fgets();
fgets();是用来读字符串的
fputs()是用来写字符串的
用法是fgets(字符串地址,大小,fp)
fputs(字符串地址,大小,fp)
例如
char s[10];
FILE *fp;
fgets(s,8,fi);
从文件中读出的8个字符到数组s中
你在用
printf("%s",s);
输出就行了
还有好多,就先介绍到这里把
首先fgets函数是以指定的文件作为读的对象的,和gets功能类似。
回答:
①:while是条件,如果后面的那句成立,则向下执行,否则循环结束;
②:和第一个问题一样(注条件是!= '\n')是循环,否则结束,所以当读入的字符为'\n'循环结束;
③:这个读入的时候必需得有 '\n'这个符号是才停止循环,你按回车换行它是读不出来的。。。。
从流中读一行或指定个字符,
原型是char *fgets(char *s, int n, FILE *stream);
从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。
从流中读一行或指定个字符,原型是char*fgets(char*s,intn,FILE*stream);从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。
*string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针fgets的返回值是个指针,*fgets(buffer,100,stdin)就是取返回指针所指向地址的第一个字符,fgets的返回值是char*.要是输入一串字符,返回的第一字符一定不是\n如果要是一个空行,第一个一定是\n,所以会推出循环,如果while中的两个条件都满足,就会进入循环继续计算。
扩展资料:一、函数原型是: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中的情况进行测试,并不能看到案例中所描述的情景,因为具体的实现不同。
stream文件流指针体指向文件内容地址的偏移原则
例:
如果一个文件的当前位置的文本如下
Love, I Have
Since you can do it.
如果用fgets(str1,6,file1);去读取
则执行后str1 = "Love," ,读取了6-1=5个字符
这个时候再执行fgets(str1,20,file1)则执行后str1 = " I Have\n"
而如果
fgets(str1,23,file1);
则执行str1="Love ,I Have",读取了一行(包括行尾的'\n',并自动加上字符串结束符'\0'),当前文件位置移至下一行,虽然23大于当前行上字符总和,可是不会继续到下一行。而下一次调用fgets()继续读取的时候是从下一行开始读。
参考资料:百度百科-fgets
简答题:fgetc,fgets,fscanf,fread有什么样的区别?
fgetc用于文本读入,一次可以读取一个字符;
fgets用于文本读入,一次可以读入一个字符串,直到达到指定长度或遇到换行符;
fscanf用于文本读入,可以进行格式化的读取;
fread用于数据读入,一次可以读入多个字节。
首先这四个函数都是从文件或者输入设备读取数据,它们之间的主要区别如下:
一、fgetc
这个函数主要用于从文件或者输入设备逐个读取字符并通过返回值返回。一般如果是从文件读取,这个文件得提前以文本模式打开。
二、fgets
这个函数主要用于从文件或者输入设备读取一行字符,如果从文件读取也要求以文本模式打开文件。这个函数相对gets要安全,因为它可以通过第二个参数指定最大能读取的字符数,防止溢出。同时这个函数会读入换行符,它一般可以和fputs函数配合使用,fputs函数输出不会自动换行。fgets也可以从键盘输入字符,通过第三个参数指定读取位置,stdin表示从键盘,文件指针表示从文件。
三、fscanf
这个函数从文件中以格式化形式读取,也是要以文本形式打开文件,具体的用法和scanf一样。文件得是文本形式,二进制形式一般是会读取出错。
四、fread
fread函数主要用于以二进制模式从文件中读取数据,它一般和fwrite函数配合使用。主要用于结构体类型变量的读取。它要求文件先以二进制模式打开,如果不指定二进制模式在Windows系统可能出错,因为Windows的换行是两个字符,是换行和回车两个字符转化而来。所以使用这个函数最好以二进制打开。
linux中fgets函数怎么用
fgets函数是从输入流中读取一个字符串,它是遇到换行符,或者传输了限定的字符数量,或者遇到EOF文件尾就停止(它会把换行符也加到接收字符串里面)。fgets函数的原型是:
char *fgets(char *s, int n, FILE *stream);
函数参数说明:第一个参数是接收参数,用于接收输入文件流的字符串,第二个参数n是字符串传输长度限定参数,表示当接收了n-1个字符时停止写入,第三个参数是文件流(就是fopen函数返回的文件流),也可以是输入流stdin。使用这个函数需要include头文件
。
fgets函数和scanf的%s参数的区别是:scanf接收输入字符串时,是遇到空白字符就停止,而且scanf无法限定接收字符串的长度。
关于C语言中字符串处理函数fgets的用法
fgets(str1,11,stdin); -- fgets 从文件输入流读取一行字符串(分隔符是换行键),包括空白到 str1 里。stdin 表示标准输入流,就是键盘输入。11 (实际上用10) 是 最多读入的字符个数。
当一行(含'\n') 不足11个字符 时,读到 '\n',包括 '\n' ,放入str1
当一行超过10个字符时,只读10个字符,放入str1。
照理你应当声明:
char str1[11] ,str2[11]; 而不是 [10].
---------
当你拍入 1234567890ABCDEFG,这串东西进了 输入缓冲区
fgets(str1 。。)到 输入缓冲区 用去了 1234567890, 还余下 ABCDEFG
fgets(str2 。。)接着 到 输入缓冲区,从余下的东西里 取数。打算 取 11 (实际上用10)个字符,但遇到了 Enter 键,所以 读入的内容是 ABCDEFG
输出语句就不用说了。
fgets(char* s, int size, FILE* stream) :
最多在stream中读取size-1个字符存入s指向的缓冲区。
遇到EOF(文件结束符)或'\n'结束,('\n'放入s中)
并在末尾加个\0。
fgets(str1,11,stdin); -- fgets 从文件输入流读取一行字符串(分隔符是换行键),包括空白到 str1 里。stdin 表示标准输入流,就是键盘输入。11 (实际上用10) 是 最多读入的字符个数。
当一行(含'\n') 不足11个字符 时,读到 '\n',包括 '\n' ,放入str1
当一行超过10个字符时,只读10个字符,放入str1。
照理你应当声明:
char str1[11] ,str2[11]; 而不是 [10].
---------
当你拍入 1234567890ABCDEFG,这串东西进了 输入缓冲区
fgets(str1 。。)到 输入缓冲区 用去了 1234567890, 还余下 ABCDEFG
fgets(str2 。。)接着 到 输入缓冲区,从余下的东西里 取数。打算 取 11 (实际上用10)个字符,但遇到了 Enter 键,所以 读入的内容是 ABCDEFG
输出语句就不用说了。
求大神指点:C++里头fgets()到底是怎么用的???
单说读入字符串,scanf和gets只可以从键盘读入,而fgets可以通过第三个参数控制从键盘读入或者文件(如.txt,.dat,.inf)读入
fgets(char *str, int len, FILE *stream)
第一个参数是字符串数组,第二个是可以读入到字符串中字符的最大个数,第三个是文件流,若为stdin则从键盘读入,若是FILE*指针则从文件中读取
#include
int main(){ char str[32]; fgets(str, 10, stdin); printf(str); // 读入123456789回车 // 输出123456789换行 // 读入1234567890回车 // 输出123456789 return 0;}#include
#include
int main(){ char str[128]; FILE *fp = fopen("./a.txt", "r"); // 逐行读入本地文件 a.txt 的内容并输出 while( !feof(fp) ) { memset(str, 0, sizeof(str)); fgets(str, sizeof(str)-1, fp); puts(str); } return 0;}
c语言中gets ,getschar 和fgets 的用法及三者之间的差别
C语言中gets,getchar,fgets的用法如下:
#include
main() //gets,getchar用法
{
char str[30];
int c;
printf("Input a string:");
gets(str);
printf("The strint input was:%s\n",str);
while((c=getchar())!='\n')printf("%c",c);
}
#include
#include
main()
{
FILE *stream;
char str[]="this is a test";
char msg[20];
stream=fopen("temp.dat","w+");
fwrite(string,strlen(string),1,stream);
fseek(stream,0,SEEK_SET);
fgets(msg,strlen(string)+1,stream);
printf("%s",msg);
fclose(stream);
}
gets用于输入一串字符,可以输入空格,输入完毕gets会自动给输入的字符串后面补'\0';头文件string.h。
getchar用于输入单个字符,单句getchar()还有清空输入缓存的作用。头文件stdio.h。
fgets用于从文件中读取一串字符,读取到的个数由传入参数决定,另外fgets读取的时候遇到'\n'也会停止。头文件stdio.h。
C语言 怎么用fgets()读取一个txt文件中的任意行的信息
#include "stdio.h"
#include "string.h"
void main()
{
int n;
FILE *fin;
char s[25];
fin=fopen("c:\\a.txt","r");
fgets(s,25,fin);/*用fgets读第一行到数组s中*/
n=strlen(s);
fseek(fin,n+1,SEEK_SET);/*将文件指针移到下一行*/
fgets(s,25,fin);/*读取第二行的字符串*/
printf("%s",s);
}
这个是我写的一个,如果你想读到第n行的话,用一个for循环控制使文件指针移到第n行就行了。
如果使用fgets()读取某个文件,第一次读取的bufsize为5,而文件的第一行有10个字符(算上’\n’),那么读取文件的指针会偏移至当前读取完的这个字符之后的位置。也就是第二次再用fgets()读取文件的时候,则会继续读取其后的字符。
如果使用fgets() 读取文件的时候bufsize大于该行的字符总数加2(多出来的两个,一个保存文件本身的’\n’换行,一个保存字符串本身的结束标识’\0’),文件并不会继续读下去,仅仅只是这一行读取完,随后指向文件的指针会自动偏移至下一行。
哥哥帮你写一个给你参考!
键盘输入一个数字代表你要读的行,你爱读哪行就哪行!
#include
#include
#include
int main(void)
{
FILE *fp = NULL;
char buf[1024] = {0};
int count = 0;
int row = 0;
int ch = 0;
fp = fopen("test.txt", "r");
if (fp == NULL)
{
printf("Cann't open the file!\n");
exit(1);
}
else
{
while (1)
{
printf("Input a row you want to read: \n");
scanf("%d", &row);
fflush(stdin);
while (!feof(fp))
{
fgets(buf, 1024, fp);
count++;
if (row == count)
{
printf("%s", buf);
}
memset(buf, 0, sizeof(buf));
}
count = 0;
rewind(fp);
printf("go on? [y/n]: ");
scanf("%c", &ch);
fflush(stdin);
if (ch == 'y' || ch == 'Y')
{
continue;
}
else
{
break;
}
}
fclose(fp);
}
return 0;
}
首先定义文件指针 fp=fopen("文件名称","r");然后用fseek()设置文件指针的位置;最后用fgets()得到行信息;
int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。
fgets()函数原型char *fgets(char *buf, int bufsize, FILE *stream);参数*buf: 字符型指针,指向用来存储所得数据的地址。bufsize: 整型数据,指明存储数据的大小。*stream: 文件结构体指针,将要读取的文件流。
怎么用C++在文本中读取一行或多行指定的数据?
用getline函数,从文件流中读取每一个,然后和"语文成绩"这个字符串比较,如果匹配,就加入vector中,然后全部读取完以后,再排序。这样说你会懂吗?不懂我帮你写。
主要考察读写文件以及字符串类中的一些成员函数的应用。#include
#include