C程序设计(第五版)谭浩强---第十章 文件的输入输出习题

例1:从键盘输入一些字符,并逐个把它们送到磁盘上去,直到用户输入一个'#'为止

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

int main() {
	FILE* fp;
	char ch, filename[20];
	printf("输入文件名:");
	gets_s(filename);
	if ((fp = fopen(filename, "w")) == NULL) {
		printf("打开错误!");
		exit(0);
	}
	printf("输入字符串(以'#'结束):");
	ch = getchar();
	while(ch != '#') {
		fputc(ch, fp);
		ch = getchar();
	}
	fclose(fp);
	return 0;
}

例2:将一个磁盘文件中的信息复制到另一个磁盘文件中。今要求将上例建立的a.txt文件中的内容复制到另一个磁盘文件中的b.txt中

feof()函数:检测流上的文件结束符的函数,如果文件结束,则返回非0值,否则返回0。一般在文件操作,中经常使用feof()判断文件是否结束。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main() {
	FILE* p, * q;  // p指向读入文件,q指向输出文件
	char ch, filename1[20], filename2[20];
	printf("请输入读入文件的名字:");
	gets_s(filename1);
	if ((p = fopen(filename1, "r")) == NULL) {
		printf("无法打开此文件");
		exit(0);
	}
	printf("请输入写入文件的名字:");
	gets_s(filename2);
	if ((q = fopen(filename2, "w")) == NULL) {
		printf("无法打开此文件");
		exit(0);
	}
	ch = fgetc(p);
	while (!feof(p)) {
		fputc(ch, q);
		ch = fgetc(p);
	}
	fclose(p);
	fclose(q);
	return 0;
}

例3:从键盘读入若干个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void swap(char *p, char *q) {
	char temp[100];
	strcpy(temp, p);
	strcpy(p, q);
	strcpy(q, temp);
}

int main() {
	FILE* fp;
	char a[100], b[100], c[100], filename[20];
	int i, j;
	gets_s(a);
	gets_s(b);
	gets_s(c);
	// 假设字符串从小到大排序
	if (strcmp(a, b) > 0) swap(a, b);
	if (strcmp(a, c) > 0) swap(a, c);
	if (strcmp(b, c) > 0) swap(b, c);
	printf("请输入文件名:");
	gets_s(filename);
	if ((fp = fopen(filename, "w")) == NULL) {
		printf("无法打开文件!");
	}
	fputs(a, fp);
	fputc('\n', fp);		// 向文件输入换行符
	fputs(b, fp);
	fputc('\n', fp);
	fputs(c, fp);
	fclose(fp);
	return 0;
}

例4:从键盘输入5个学生的有关数据,然后把它们转存到磁盘文件上去

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define N 5

//从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去
struct student {
	int num;
	char name[10];
	int age;
	char addr[20];
};

int main() {
	FILE* fp;
	int i;
	char filename[20];
	struct student stu[N];
	printf("请输入文件名:");
	gets_s(filename);
	if ((fp = fopen(filename, "wb")) == NULL) {
		printf("无法打开文件!");
		exit(0);
	}
	for (i = 0; i < N; i++) {
		printf("请输入第%d位学生的信息:", i + 1);
		scanf("%d%s%d%s", &stu[i].num, &stu[i].name, &stu[i].age, &stu[i].addr);
		if ((fwrite(&stu[i], sizeof(struct student), 1, fp)) != 1) {
			printf("文件未被写入!");
		}
	}
	fclose(fp);
	return 0;
}

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值