
C语言_文件流练习
发布日期:2021-05-14 23:42:53
浏览次数:18
分类:精选文章
本文共 4079 字,大约阅读时间需要 13 分钟。
2021-04-20 文件io练习
题1:fputc和fgetc练习
这个练习要求我们使用fputc和fgetc函数来实现一个简单的文件操作。程序的主要功能是从终端读取输入字母,遇到@结尾时将输入的字母写入指定文件中,然后再读取文件内容并打印到屏幕。
程序的实现步骤如下:
1. 使用fopen函数打开指定文件,进行写入操作。 2. 使用fputc函数读取用户输入的字符,直到遇到@字符退出循环。 3. 读取文件内容并打印到屏幕。代码示例如下:
#includeint main(int argc, char **argv) { FILE *fp = fopen(argv[1], "w"); int ch; printf("请输入字符串,以@结尾:\n"); while (ch = getchar(), fputc(ch, fp), ch != '@') { // 代码正常执行 } fclose(fp); FILE *fp1 = fopen(argv[1], "r"); while ((ch = fgetc(fp1)) != EOF) { putchar(ch); } putchar('\n'); fclose(fp1); return 0;}
题2:fgets函数
这个练习要求我们使用fgets函数来读取文件内容并输出。程序的实现步骤如下:
1. 使用fopen函数打开指定文件,进行读取操作。 2. 使用fgets函数读取文件内容,直到读取结束。 3. 将读取到的内容打印到屏幕。代码示例如下:
#include#include int main(int argc, char **argv) { FILE *fp = fopen(argv[1], "r"); if (fp == NULL) { perror("文件打开失败"); return 1; } char str[100] = { '\0' }; while (fgets(str, sizeof(str), fp) != NULL) { fputs(str, stdout); } putchar('\n'); fclose(fp); return 0;}
题3:终端输入数字,求出所有素数的和并输出
这个练习要求我们从终端读取一系列数字,筛选出所有素数并求和。程序的实现步骤如下:
1. 使用fopen函数打开"arr.txt"文件进行写入操作。 2. 从终端读取输入并写入文件。 3. 使用fopen函数重新打开文件进行读取。 4. 使用fscanf函数读取文件中的数字并判断是否为素数。 5. 素数的和存储在变量中,最后打印到屏幕。代码示例如下:
#include#include int sushu(int num) { if (num <= 1) { return 0; } for (int i = 2; i * i <= num; i++) { if (num % i == 0) { return 0; } } return 1;}int main(int argc, char **argv) { FILE *fpOut = fopen("arr.txt", "w"); for (int i = 1; i < argc; i++) { fprintf(fpOut, "%d ", *(argv + i)); } fclose(fpOut); FILE *fpIn = fopen("arr.txt", "r"); int *arr = (int *)calloc(argc - 1, sizeof(int)); for (int i = 0; i < (argc - 1); i++) { if (fscanf(fpIn, "%d", arr + i) != 1) { break; } } fclose(fpIn); int sum = 0; for (int i = 0; i < (argc - 1); i++) { if (sushu(arr[i])) { sum += arr[i]; } } printf("输入的数中素数和为:%d\n", sum); free(arr); return 0;}
题4:fread和fwrite
这个练习要求我们使用fread和fwrite函数来实现文件的读写操作。程序的实现步骤如下:
1. 定义一个包含id、姓名和成绩的结构体。 2. 使用fopen函数打开"t1.txt"文件进行读写操作。 3. 使用fwrite函数将整数、浮点数、双精度数、字符和字符串等数据写入文件。 4. 使用fread函数重新读取文件内容并打印到屏幕。代码示例如下:
#include#include struct Stu { int id; char name[20]; float score;};int main(int argc, char **argv) { int a = 0; float b = 0; double c = 0; char ch = '\0'; char str[100] = { '\0' }; FILE *fp = fopen("t1.txt", "wb+"); if (!fp) { perror("文件打开失败"); return 0; } printf("输入整数、浮点数、双精度数、字符和字符串:\n"); scanf("%d %f %lf %c %s", &a, &b, &c, &ch, str); fwrite(&a, sizeof(a), 1, fp); fwrite(&b, sizeof(b), 1, fp); fwrite(&c, sizeof(c), 1, fp); fwrite(&ch, sizeof(ch), 1, fp); fwrite(str, sizeof(str), 1, fp); fwrite(&s, sizeof(s), 1, fp); a = 0; b = 0; c = 0; ch = '\0'; memset(str, 0, sizeof(str)); memset(&s, 0, sizeof(s)); fseek(fp, 0, 0); fread(&a, sizeof(a), 1, fp); fread(&b, sizeof(b), 1, fp); fread(&c, sizeof(c), 1, fp); fread(&ch, sizeof(ch), 1, fp); fread(str, sizeof(str), 1, fp); fread(&s, sizeof(s), 1, fp); if (ferror(fp)) { perror("读取文件时发生错误"); } else if (feof(fp)) { perror("文件已到末尾"); } fclose(fp); printf("%d %g %g %c %s\n", a, b, c, ch, str); printf("%d %s %g\n", s.id, s.name, s.score); return 0;}
题5:复制文件到另一个文件
这个练习要求我们实现文件复制功能。程序的实现步骤如下:
1. 使用fopen函数打开源文件和目标文件。 2. 使用fgetc函数从源文件读取数据。 3. 使用fputc函数将数据写入目标文件。 4. 复制完成后关闭两个文件指针。代码示例如下:
#includeint main(int argc, char **argv) { FILE *fpIn = fopen(argv[1], "r"); if (!fpIn) { perror("源文件打开失败"); return 0; } FILE *fpOut = fopen(argv[2], "w"); if (!fpOut) { perror("目标文件打开失败"); return 0; } int ch; while (ch = fgetc(fpIn), ch != EOF) { fputc(ch, fpOut); } fclose(fpIn); fclose(fpOut); return 0;}
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月10日 20时49分40秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
GitHub完整记录数据库GHTorrent的下载和安装经验
2019-03-11
设计模式—— 三:依赖倒置原则
2019-03-11
SpringBoot打包之后乱码
2019-03-11
因SGA分配错误无法启动数据库
2019-03-11
Oracle修改字段类型方法总结
2019-03-11
ORA-00020 超过当前最大连接数
2019-03-11
合理控制oracle数据库具有DBA权限的用户
2019-03-11
【Android】源码分析 - Activity启动流程
2019-03-11
喝红茶是否会上火
2019-03-11
Android进阶解密读书笔记2——第2章:Android系统启动——第1、2小节
2019-03-11
GreenDao之注解
2019-03-11
Android使用Font Awesome
2019-03-11
主线程中Looper的轮询死循环为何没有阻塞主线程?
2019-03-11
Gradle实战四:Jenkins持续集成
2019-03-11
使用RestTemplate,显示请求信息,响应信息
2019-03-11
wgcloud运维监控系统错误:防篡改校验错误次数大于10次,不再上报数据
2019-03-11
为什么WGCLOUD安装完后,启动服务端打不开网页
2019-03-11
wgcloud网络监控出现负值
2019-03-11