fscanf和fprintf,fscanf和fscanf_s
fprintf()函数和fscanf()函数会使文件指针向后移动吗?
fprintf()函数和fscanf()函数会使文件指针向后移动。
int?fprintf (FILE*?stream,?const char*format, [argument])
其中,FILE*stream为文件指针,const char*?format以什么样的格式输出,[argument]为输入列表。
例子:
#include?stdio.h
#include?stdlib.h
#include?process.h
FILE*?stream;
int?main(void)
{
????int?i?=?10;
????double?fp?=?1.5;
????char?s[]?=?"this?is?a?string";
????char?c?=?'\n';
????stream?=?fopen("fprintf.out",?"w");
????fprintf(stream,?"%s%c",?s,?c);
????fprintf(stream,?"%d\n",?i);
????fprintf(stream,?"%f\n",?fp);
????fclose(stream);
????system("typefprintf.out");
????return?0;
}
屏幕输出:
this?is?a?string
10
1.500000
函数名:?fscanf
功 能:?从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。
例子:
#include?stdlib.h
#include?stdio.h
int?main(void)
{
int?i;
printf("Input?an?integer:");
/*read?an?integer?from?the?standard?input?stream*/
if(fscanf(stdin,"%d",i))
printf("The?integer?read?was:%d\n",i);
else
{
fprintf(stderr,"Error?reading?an\
integer?from?stdin.\n");//返回EOF如果读取到文件结尾。
exit(1);
}
return0;
}
fscanf和fprintf
int
fscanf(FILE*stream,
constchar*format,
[argument...]):
FILE
*stream:文件指针
char
*format:输入格式
[argument...]:附加参数列表
fscanf()的功能是从一个流中执行格式化输入,fscanf遇到
空格
和换行时结束,注意空格时也结束。fgets的区别在于,fgets遇到空格不结束。
返回值
为整形,含义为读入的参数的个数,失败则返回EOF(-1)。
案例代码:
//...
#include stdio.h
int main(void) {
FILE *FSPOINTER;
char STRBUFF[128];
//...
FSPOINTER = fopen("HELLO.TXT", "r"); //打开文件
//...
fscanf(FSPOINTER, "%s", STRBUFF); //从文件中读取字符串
//...
return 0;
};
//若HELLO.TXT中的开头字符串为HELLO,则STRBUFF中为HELLO
int fprintf
(FILE* stream, const
char*format,
[argument])
FILE*stream:文件指针
const
char* format:输出格式
[argument]:附加参数列表
fprintf()的功能是格式化输出到一个流/文件中
函数
根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.
fprintf()只能和printf()一样工作.
fprintf()的返回值是输出的
字符
数,发生错误时返回一个负值。
案例代码:
//...
#include stdio.h
int main(void) {
FILE *FSPOINTER;
char STRBUFF[16] = "Hello World."
//...
FSPOINTER = fopen("HELLO.TXT", "w+"); //创建文件
//...
fprintf(FSPOINTER, "%s", STRBUFF); //输出字符串至文件
//...
return 0;
};
//输出至文件HELLO.TXT:Hello World
fscanf、fprintf读写二进制文件
1. myData和yourData两个文件的大小;
2. 用记事本方式(或文本方式)打开myData和yourData, 看是否出现乱码.
3. 用UltraEdit打开myData和yourData,对比一下结果.
写读二进制文件,参考如下:
#includeiostream
#define N 10000
using namespace std;
void write()
{
int i, a[N];
for(i = 0; i N; i++)
a[i] = i;
FILE *fp;
fp = fopen("yourData", "w");
for(i = 0; i N; i++)
fprintf(fp, "%d ", a[i]);
fclose(fp);
}
void read()
{
FILE *fp;
fp = fopen("yourData", "r");
int i, a[N];
for(i = 0; i N; i++)
fscanf(fp, "%d", a[i]);
fclose(fp);
for(i = 0; i N; i++)
cout a[i] endl;
}
int main()
{
write();
read();
return 0;
}
关于C/C++中,fprintf和fscanf的问题!
二者在c语言和c++中的功能是相同的。
1
printf。
c语言的标准格式化输出函数。其调用格式为
int
printf(char
*
format_string,
...);
参数个数不定,依据第一个参数格式字符串中的格式字符,决定后续有多少个参数。
printf会按照格式字符串中的指定的规则,将自身及后续参数值输出到标准输出。
返回值为实际输出变量的个数。
2
fprintf。
c语言的标准格式化输出到文件函数。调用格式为
int
fprintf(file
*fp,
char
*
format_string,
...);
与printf类似,也是根据格式字符串将后续参数输出,不过目标不是固定的标准输出,而是由fp指定的文件。
所以,fprintf的第一个参数设置为stdout时,与printf功能相同。
3
以上两个函数,在c++中同样支持,使用方法相同。不过c++中更推荐使用流对象cout来执行输出。同时使用流对象类fstream来执行文件的操作。