首页技术fscanf一行一行读取 c++ 读取一行

fscanf一行一行读取 c++ 读取一行

编程之家2026-05-23921次浏览

老铁们,大家好,相信还有很多朋友对于fscanf一行一行读取和c++ 读取一行的相关问题不太懂,没关系,今天就由我来为大家分享分享fscanf一行一行读取以及c++ 读取一行的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

fscanf一行一行读取 c++ 读取一行

C语言 如何一行行读文件

C语言中,使用fgets函数遍可以一行行读取文件。

1、fgets函数:

原型:char* fgets(char* buf, int bufsize, FILE* stream);

功能:从文件结构体指针stream中读取数据,每次读取一行。

说明:读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋值为\0)。如果该行不足bufsize个字符,则读完该行就结束,如果该行超过bufsize-1个字符,则fgets只返回一个不完整的行,buf缓冲区以\0字符结束,下一次fgets调用会继续读取该行剩余的字符;

头文件:stdio.h;

fscanf一行一行读取 c++ 读取一行

返回值:若读入成功,返回与参数buf相同的字符指针,若读入过程中遇到EOF或发生错误,返回NULL指针。所以当遇到返回值为NULL的情况时,应使用ferror或feof函数检查是发生错误还是遇到EOF。

2、例程:

#include<stdio.h>

inta;

charb,c[100];

intmain(){

fscanf一行一行读取 c++ 读取一行

FILE*fp1=fopen("input.txt","r");//打开输入文件

FILE*fp2=fopen("output.txt","w");//打开输出文件

if(fp1==NULL||fp2==NULL){//若打开文件失败则退出

puts("不能打开文件!");

rturn0;

}

fscanf(fp1,"%d",&a);//从输入文件读取一个整数

b=fgetc(fp1);//从输入文件读取一个字符

fgets(c,100,fp1);//从输入文件读取一行字符串

printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数

fputs(c,fp2);//向输出文件写入一行字符串

fputc(b,fp2);//向输出文件写入一个字符

fprintf(fp2,"%d",a);//向输出文件写入一个整数

fclose(fp1);//关闭输入文件

fclose(fp2);//关闭输出文件,相当于保存

return0;

}

C语言文件读取fscanf(),该怎么处理

fscanf位于头文件<stdio.h>中,函数原型为int fscanf(FILE*stream, constchar*format, [argument...]);其功能为根据数据格式(format)从输入流(stream)中写入数据(argument);与fgets的差别在于:fscanf遇到空格和换行时结束,注意空格时也结束,fgets遇到空格不结束。

函数名: fscanf

功能:从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。

返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。

用法:

1 int fscanf(FILE*stream,constchar*format,[argument...]);

FILE*stream:文件指针

char*format:格式字符串

[argument...]:输入列表

格式字符说明

常用基本参数对照:

%d:读入一个十进制整数.

%i:读入十进制,八进制,十六进制整数,与%d类似,但是在编译时通过数据前置或后置来区分进制,如加入“0x”则是十六进制,加入“0”则为八进制。例如串“031”使用%d时会被算作31,但是使用%i时会算作25.

%u:读入一个无符号十进制整数.

%f%F%g%G:用来输入实数,可以用小数形式或指数形式输入.

%x%X:读入十六进制整数.

%o':读入八进制整数.

%s:读入一个字符串,遇空字符‘\0'结束。

%c:读入一个字符。无法读入空值。空格可以被读入。

附加格式说明字符表修饰符说明

L/l长度修饰符输入"长"数据

h长度修饰符输入"短"数据

示例说明

如果要求从标准输入中输入一串字符串和一个整型数,那么参数“%s%d”表示什么呢?默认情况下,在终端上(这里假设程序为控制台应用程序)输入第一个参数的值的时候敲下回车,则在第二行输入的为第二个参数值,采用这种输入方法那么格式字符的形式就无关紧要了。[1]

这里要特殊说明的是如果参数在同一行给出,那么格式字符的参数与终端的输入会有什么关系。举个例子:如果格式字符为“%s+%d”,那么参数的输入就应该为 string+ integer。

程序例

例一

#include<stdlib.h>

#include<stdio.h>

int main(void)

{

int i;

printf("Input an integer:");

/*从标准输入中读取一个整数*/

if(fscanf(stdin,"%d",&i))

printf("The integer read was:%d\n", i);

else

{

fprintf(stderr,"Error reading an integer from stdin.\n");

exit(1);

}

return 0;

}

返回EOF如果读取到文件结尾。

例二

附:MSDN中例子

#include<stdio.h>

FILE*stream;

int main(void)

{

long l;

float fp;

char s[81];

char c;

stream= fopen("fscanf.out","w+");

if(stream==NULL)

printf("The file fscanf.out was not opened\n");

else

{

fprintf(stream,"%s%ld%f%c","a-string", 65000,3.14159,'x');

/*将指针设置至文件开头*/

fseek(stream,0L,SEEK_SET);

/*从文件中读取数据*/

fscanf(stream,"%s",s);

fscanf(stream,"%ld",&l);

fscanf(stream,"%f",&fp);

fscanf(stream,"%c",&c);

/*输出读取的数据*/

printf("%s\n",s);

printf("%ld\n",l);

printf("%f\n",fp);

printf("%c\n",c);

fclose(stream);

}

return 0;

}//这样会有意外输出

fscanf函数的用法

用法:int fscanf(FILE*stream,char*format,[argument...]);解析:int fscanf(文件指针,格式字符串,输入列表);返回值:类型是整型,成功读入的参数的个数。新建data.txt文件,存入3组坐标,运行程序并输出结果。

fscanf函数的用法 fscanf第一个参数需要一个文件指针,为了查看实验效果,这里先新建一个名为test.txt的文本文件,放在源代码的文件夹,输入如下内容:

123

123.456

Hello world!

要对文件操作,必须将该文件打开:

fp= fopen("test.txt","r");

同时使用完毕后不要忘记使用fclose关闭文件。

test.txt第一行保存的是一个整数,所以可以使用fscanf先读取一个整数:

fscanf(fp,"%d",&num);

test.txt第二行保存了一个浮点数,按照浮点数的格式进行读取:

fscanf(fp,"%f",&fNum);

需要注意的是,由于浮点数位于第二行,所以要想读取这个浮点数,应当先把第一个数读完,否则读取的回事123.000000

同样可以使用类似的方法读取位于第三行的字符串:

fscanf(fp,"%s", str);

但是,从程序的运行结果发现,第三行存储的是Hello world!,而实际运行结果只有“Hello”,这表明fscanf遇到空格会终止本次读操作。

当将fscanf第一个参数设定为stdin时,将实现和scanf函数相同的效果:

fp= stdin;//设置fp为标准输入

fscanf(fp,"%d",&num);//从fp读取一个整数

文章到此结束,如果本次分享的fscanf一行一行读取和c++ 读取一行的问题解决了您的问题,那么我们由衷的感到高兴!

小学生免费编程课(为什么不建议孩子学编程)c语言指针编程题经典100例(c语言指针编程题及详解)