关于流(文件)的输入,输出与调用(fprintf,fscanf)

fprintf()函数

fprintf()函数用于将字符集输出文件。它将格式化的输出发送到流,一般用于文件内容的调用。将agars(参数表)内各项的值,按format(格式控制字符串)所表示的格式,将数据格式为字符串的形式写入到文件指针fp指向的文件中。

原型:fprintf(FILE *fp, const char *format, agars)

具体参照以下示例:

int main()
{
	FILE* fp;//定义指向文件类型的指针
	int a[10000];
	int i, j, n, temp;
	//二,创建一个有序线性表
	if ((fp = fopen("D:\\work\\SeqList work\\data10000.txt", "r")) == NULL)
		//以只读的方式打开文件data10000,若打开失败则返回NULL.Vs中对路径的识别为"\\"
	{
		fprintf(stderr, "Error opening file.");//从字符输出到流,故用fprintf函数,stderr为标准错误输出设备
		exit(0);

fscanf()函数
fscanf()函数的头文件是<stdio.h>.用于将字符集写入文件。

函数原型 为 int fscanf(FILE*stream, constchar*format, [argument...]);其功能为根据数据格式(format)从输入流(stream)中写入数据(argument);

【参数】stream为文件指针,format为格式化字符串,argument 为格式化控制符对应的参数。

从文件指针fp指向的文件中,按format中对应的控制格式读取数据,并存储在agars对应的变量中;原型: fscanf(FILE *fp, const char *format, agars)

具体参照以下示例:

if ((fp = fopen("D:\\work\\SeqList work\\data10000.txt", "r")) == NULL)
		//以只读的方式打开文件data10000,若打开失败则返回NULL.Vs中对路径的识别为"\\"
	{
		fprintf(stderr, "Error opening file.");//从字符输出到流,故用fprintf函数,stderr为标准错误输出设备
		exit(0);

	}
	else if (n = N > 10000)//判断插入顺序是否合理
	{
		printf("Data overflow!please try again!");
		exit(0);

	}
	else for (; n < N; n++)//比较插入元素与有序表中元素位置并插入
    fscanf(fp, "%d", &temp);//从一个流中执行格式化输入

注意在vs编译环境下,调用fprintf与fscanf函数会报错。根本原因是我们在编译老的用C语言的开源项目如lua源包的时候,可能因为一些老的.c文件使用了strcpy,scanf等不安全的函数,而报警告和错误,而导致无法编译通过。

解决方法:在程序的最开始定义一个宏,如图所示,此方法对该文件有效。

#define _CRT_SECURE_NO_WARNINGS//vs中fprintf,fscanf中不被识别
#define UNREFERENCED_VALUE(P)          (P)//忽略编译器warning
#include<stdio.h>
#include<stdlib.h>
#define N 10000
int main()

同理,也可以在项目属性里设置,这会在整个项目里生效,依次选择:属性->配置属性->C/C++ ->预处理器->预处理器定义->编辑

最下面加上一行:_CRT_SECURE_NO_WARNINGS   (注意不需要#define)

如下图所示:

关于流(文件)的输入,输出与调用(fprintf,fscanf)

上一篇:模式识别实验二:势函数迭代训练 预习报告


下一篇:吴恩达机器学习编程作业ex3 Multi-class Classification