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)
如下图所示: