C语言_文件流练习
发布日期:2021-05-14 23:42:53 浏览次数:18 分类:精选文章

本文共 4079 字,大约阅读时间需要 13 分钟。

2021-04-20 文件io练习

题1:fputc和fgetc练习

这个练习要求我们使用fputc和fgetc函数来实现一个简单的文件操作。程序的主要功能是从终端读取输入字母,遇到@结尾时将输入的字母写入指定文件中,然后再读取文件内容并打印到屏幕。

程序的实现步骤如下:

1. 使用fopen函数打开指定文件,进行写入操作。 2. 使用fputc函数读取用户输入的字符,直到遇到@字符退出循环。 3. 读取文件内容并打印到屏幕。

代码示例如下:

#include 
int 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. 复制完成后关闭两个文件指针。

代码示例如下:

#include 
int 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;
}
上一篇:Linux学习_系统进程概念
下一篇:C语言_结构体练习

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月10日 20时49分40秒