IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言学习之 文件输入输出.day2 -> 正文阅读

[C++知识库]C语言学习之 文件输入输出.day2

对函数功能不熟练。

对“rb”"rw"这种方式不是很理解,二进制文件方式?文件中看不到,但是

能输出并显示到控制台上。

1.从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去。

#include <stdio.h>
#define SIZE 10
struct Student_type
{	char name[10];
	int num;
	int age;
	char addr[15];
}stud[SIZE];	//定义全局结构体数组stud,包含10个学生数据

void save()	//定义函数save,向文件输出SIZE个学生的数据
{	FILE *fp;
	int i;
	if((fp=fopen("stu.dat","wb"))==NULL)	//打开输出文件stu.dat
	{	printf("cannot open file\n");
		return;
	}
	for(i=0;i<SIZE;i++)
		if(fwrite(&stud[i],sizeof(struct Student_type),1,fp)!=1)
			printf("file write error\n");
	fclose(fp);
}

int main()
{	int i;
	printf("Please enter data of students:\n");
	for(i=0;i<SIZE;i++)
	//输入SIZE个学生的数据,存放在数组stud中
	scanf("%s%d%d%s",stud[i].name,&stud[i].num,
		&stud[i].age,stud[i].addr);
	save();
	return 0;
}

2.验证在磁盘文件stu.dat中是否已存在数据

#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
struct Student_type
{	char name[10];
	int num;
	int age;
	char addr[15];
}stud[SIZE];

int main()
{	int i;
	FILE *fp;
	if((fp=fopen("stu.dat","rb"))==NULL)	//打开输入文件stu.dat
	{	printf("cannot open file\n");
		exit(0);
	}
	for(i=0;i<SIZE;i++)
	{	fread(&stud[i],sizeof(struct Student_type),1,fp);	//从fp指向的文件读入一组数据
		printf("%-10s %4d %4d %-15s\n",
         stud[i].name,stud[i].num,stud[i]. age,stud[i].addr);
		//在屏幕上输出这组数据
	}
	fclose(fp);						//关闭文件stu_list
	return 0;
}

3.怎样向文件读写一个字符串

(1) 数据的存储方式

文本方式: 数据以字符方式(ASCII代码)存储到文件中。如整数12,送到文件时占2个字节,而不是4个字节。以文本方式保存的数据便于阅读。

二进制方式: 数据按在内存的存储状态原封不动地复制到文件。如整数12,送到文件时和在内存中一样占4个字节。

(2) 文件的分类

文本文件(ASCII文件): ? 文件中全部为ASCII字符。

二进制文件: 按二进制方式把在内存中的数据复制到文件的,称为二进制文件,即映像文件。

(3) 文件的打开方式

文本方式: 不带b的方式,读写文件时对换行符进行转换。

二进制方式: 带b的方式,读写文件时对换行符不进行转换。

(4) 文件读写函数

文本读写函数: 用来向文本文件读写字符数据的函数(如fgetc,fgets,fputc,fputs,fscanf,fprintf等)。

二进制读写函数: 用来向二进制文件读写二进制数据的函数(如getw,putw,fread,fwrite等)。

4.有一个磁盘文件,内有一些信息。要求第1次将它的内容显示在屏幕上,第2次把它复制到另一文件上。

#include<stdio.h>
int main()
{	char ch;
	FILE *fp1,*fp2;
	fp1=fopen("file1.dat","r");	//打开输入文件
	fp2=fopen("file2.dat","w");	//打开输出文件
	ch=getc(fp1);				//从file1.dat文件读入第一个字符
	while(!feof(fp1))			//当未读取文件尾标志
	{	putchar(ch);			//在屏幕输出一个字符
		ch=getc(fp1);			//再从file1.dat文件读入一个字符
	}
	putchar(10);				//在屏幕执行换行
	rewind(fp1);				//使文件位置标记返回文件开头
	ch=getc(fp1);				//从file1.dat文件读入第一个字符
	while(!feof(fp1))			//当未读取文件尾标志
	{	fputc(ch,fp2);			//向file2.dat文件输出一个字符
		ch=fgetc(fp1);			//再从file1.dat文件读入一个字符
	}
	fclose(fp1);fclose(fp2);
	return 0;
}

5.在磁盘文件上存有10个学生的数据。要求将第1,3,5,7,9个学生数据输入计算机,并在屏幕上显示出来。

#include<stdio.h>
#include <stdlib.h>
struct Student_type	//学生数据类型
{	char name[10];
	int num;
	int age;
	char addr[15];
}stud[10];
int main()
{	int i;
	FILE *fp;
	if((fp=fopen("stu.dat","rb"))==NULL)	//以只读方式打开二进制文件
	{	printf("can not open file\n");
		exit(0);
	}
	for(i=0;i<10;i+=2)
	{	fseek(fp,i*sizeof(struct Student_type),0);	//移动文件位置标记
		fread(&stud[i],sizeof(struct Student_type),1,fp);	//读一个数据块到结构体变量
		printf("%-10s %4d %4d %-15s\n",
         stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
	 	//在屏幕输出
	}
	fclose(fp);
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 14:54:29  更:2021-08-20 14:56:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:42:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码