关于fprintf()和fscanf() fscanf fprintf

fprintf、fscanf的读写对象不是终端而是磁盘文件;
调用方式为:intfprintf(文件指针,格式字符串,输出表列 )返回值:返回实际输出的字符数,
操作不成功返回EOF
int fscanf(文件指针,格式字符串,输入表列 )返回值:返回输入的数据个数,操作不成功返回EOF
fprintf(fp, "%d, %6.2f", i,t)  将整型变量 i 和实型变量 t的值按%d和%6.2f的格式输出到fp所指向的文件中;  若i=3,t=4.5,则输出到磁盘中的格式为:3,4.50相应的,从文件中读取数据时,则应用:fscanf(fp, "%d,%f", &i,&t)

在运用fprintf与fscanf时,在向文件输出数据及从文件读取数据时,分隔符应该相一致。如下程序所示,该程序的功能是:用户输入8个整型数据,程序回显并把数据写到int.txt文件中,然后程序再从int.txt文件中读取数据,并显示出来。
#include <stdio.h>
main()
{
FILE *fp;
int i,ss[8],new[8];
for(i=0;i<8;i++){
scanf("%d",&ss[i]);
}
fp=fopen("int.txt","w");
printf("start diesplay olddata!");
for(i=0;i<8;i++){
printf("%d:%-10d",i+1,ss[i]);
fprintf(fp,"%d,",ss[i]);  
}
关于fprintf()和fscanf() fscanf fprintf
fclose(fp);
printf("Now diseplay readdate!");
if((fp=fopen("int.txt","r"))==NULL) return 1;
for(i=0;i<8;i++){
fscanf(fp,"%d,",&new[i]);  

printf("%d:%-10d",i+1,new[i]);
}
fclose(fp);
}

分隔符也可采用,即回车符,那么程序中二句相应改为:
fprintf(fp,"%d",ss[i]);
fscanf(fp,"%d",&new[i]); 

使用fprintf和fscanf的优点:

使用fread和fwrite的优点就是二进制的读取是最快的。但是它们有缺陷,就是在

读取的时候 while(!feof(fp)) 不精确,往往会发现它多循环了一次。因为feof

()是根据剩余字符来判断是否文件结尾的,而文件的结尾标识符是''是两个字

节,在读取''的时候feof()还是为false只有读取完''的时候feof()==true。

致使产生多余的循环(如果使用while(!feof(fp))的话)。使用fprintf和fscanf

,因为这两个函数具有输入/输出的格式限制,即使在读取''处有多余的循环,

但由于其不满足输入/输出格式,所以多余的循环被屏蔽掉。

最好就是这样:"%dt%dt" 这样的每个数字后面都是有限制的,这样就可以起到

很好的屏蔽作用。^^

对文件的读和写是最常用的文件操作。在C语言中提供了多种文件读写的函数:

·字符读写函数 :fgetc和fputc

·字符串读写函数:fgets和fputs

·数据块读写函数:fread和fwrite

·格式化读写函数:fscanf和fprinf

随着每次数据的读取,文件流指针fp都作相应的移动

使用以上函数都要求包含头文件stdio.h。例子都来自msdn

1 fprintf——Print formatted data to a stream

#include <stdio.h>
#include <process.h>

FILE *stream;

void main( void )
{
inti = 10;
double fp = 1.5;
char s[] ="this is a string";
char c ='';

stream = fopen("fprintf.out", "w" );
fprintf( stream, "%s%c", s, c);
fprintf( stream, "%d", i);
fprintf( stream, "%f", fp);
fclose( stream );
system( "type fprintf.out");
}

Output

this is a string101.500000
2 fscanf——Read formatted data from a stream
#include <stdio.h>FILE *stream;voidmain( void ){long l; floatfp; chars[81]; charc; stream =fopen( "fscanf.out", "w+"); if( stream== NULL)printf( "The file fscanf.out was not opened");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", s);printf( "%ld", l);printf( "%f", fp);printf( "%c", c);fclose( stream);}}Outputa-string650003.141590x3 fread——Reads data from astream
4 fwrite——Writes data to a stream
读数据块函数调用的一般形式为: fread(buffer,size,count,fp); 写数据块函数调用的一般形式为:fwrite(buffer,size,count,fp); 其中: buffer是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。 size表示数据块的字节数。 count 表示要读写的数据块块数。 fp 表示文件指针。
5 fgets 没有看出与fread太大的区别,除了fread可以处理string外的其他不同文件的数据类型
6 fputs
7 fgetc fputs
从键盘输入一行字符,写入一个文件,再把该文件内容读出显示在屏幕上。 #i nclude main() { FILE *fp; charch; if((fp=fopen("d:\jrzh\example\string","wt+"))==NULL) {printf("Cannot open file strike any key exit!"); getch(); exit(1);} printf("input a string:"); ch=getchar(); while (ch!='') {fputc(ch,fp); ch=getchar(); } rewind(fp); //Repositions the filepointer to the beginning of a filech=fgetc(fp); while(ch!=EOF) {putchar(ch); ch=fgetc(fp); } printf(""); fclose(fp); }

  

爱华网本文地址 » http://www.413yy.cn/a/25101012/125163.html

更多阅读

转载 关于CEO和COO ceo coo

原文地址:关于CEO和COO作者:北北(英特尔CEO) 无论是什么行业,什么样的管理模式大公司通常有两个不可货缺的角色:CEO的角色和COO的角色。在某种意义上不能不说COO就是CEO催生产物。多少个莎士比亚,就有多少个哈姆雷特;CEO有多少种不同

转载 关于趋势和线性回归线 非线性回归

原文地址:关于趋势和线性回归线作者:冰舞于飞2.1.1 简短但重要的前言亲爱的读者! 现在我们和您开始认识一组任何一位交易员都必备的市场分析工具——趋势指标。别看这些工具都有很重要的名称,实际上它们都简单

关于fprintf()和fscanf() fscanf fprintf

fprintf、fscanf的读写对象不是终端而是磁盘文件;调用方式为:intfprintf(文件指针,格式字符串,输出表列 )返回值:返回实际输出的字符数,操作不成功返回EOFint fscanf(文件指针,格式字符串,输入表列 )返回值:返回输入的数据个数,操作不成功返回

声明:《关于fprintf()和fscanf() fscanf fprintf》为网友摸熙哥分享!如侵犯到您的合法权益请联系我们删除