C语言fscanf和fprintf

本文详细介绍了fscanf和fprintf函数的使用方法,包括如何格式化地从文件中读取和写入数据。通过实例展示了不同格式化选项的效果,并提供了一个完整的C语言示例程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多时候我们需要写入数据到文件中时都觉得很困扰,因为格式乱七八槽的,可读性太差了,
于是我们就想有没有什么函数可以格式化的从文件中输入和输出呢,还真有。下面我将讲解
一下fscanf和fprintf的强大之处。

1、fscanf(可以从一个文件流中格式化读出数据,遇到空格或回车就停止)
原型: int fscanf(FILE *stream, const char *format, ...);     //fscanf(文件流指针,格式字符串,输出表列);
参数:
FILE *stream :文件流指针
const char *format, ... :字符串的格式
例子 :
fscanf(fp,"%s %s %d",new1->number,new1->staddress,&new1->price);(这样写的话数据输入到文件中时每个数据中间就会有一个空格)
或者写成:
fscanf(fp,"%s,%s,%d",new1->number,new1->staddress,&new1->price);(这样写的话数据输入到文件中时每个数据中间就会有一个‘,’)


2、fprintf(可以向一个文件中格式化写入数据)

原型: int fprintf(FILE *stream, const char *format, ...);    //fprintf(文件流指针,格式字符串,输出表列);
参数:
 a、FILE *stream :文件流指针

 b、const char *format, ... :字符串的格式

例子 :
fprintf(fp,"%s %s %d\n",new->number,new->staddress,new->price);   //同上
或者写成:
fprintf(fp,"%s,%s,%d\n",new->number,new->staddress,new->price);   //同上



下面是代码:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

#define LENGTH 100 //数组的大小

typedef struct 
{
	char number[LENGTH];
	char staddress[LENGTH];
    int price;
}*node,Node;

int main(int argc,char *argv[])
{
	FILE *fp;
	fp = fopen("test.txt","a+"); //以读写的权限打开文件(如果文件不存在则创建)
	if(fp == NULL)
	{
		perror("fopen");
		exit(1);
	}
	
    node new,new1; //new用来存放写入到文件中的数据,new1用来存放从文件中读出的数据
	
    //为两个结构体指针分配空间
	new = (node)malloc(sizeof(Node));
	new1 = (node)malloc(sizeof(Node));
	
	//清空
	memset(new,0,sizeof(node));
	memset(new1,0,sizeof(node));
	
	 
	strcpy(new->number,"20170816");
	strcpy(new->staddress,"南宁");
	new->price = 100;
	
	
	fprintf(fp,"%s %s %d\n",new->number,new->staddress,new->price); //格式化写入数据到文件中
	
    fseek(fp, 0,  SEEK_SET); //文件指针重置,因为上面把数据写入文件的时候已经把文件流指针定位到文件尾了,所以要重新定位到文件头

	fscanf(fp,"%s %s %d",new1->number,new1->staddress,&new1->price);//格式化从文件中读出数据
	printf("%s %s %d\n",new1->number,new1->staddress,new1->price);
	
	
	//释放两个结构体指针
	free(new);
	free(new1);
	
	fclose(fp); //关闭文件
	return 0;

}


这是我在ubuntu上运行的结果:

屏幕输出:





打开test.txt文件中的内容:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值