C语言文件

扫码查看

任务一:

你现在拥有一个数组,数组中储存着总共10个人的姓名字符串
你需要为每个人创建一个txt文件,以他们的名字命名。
例如: 生成 笨笨.txt文件
代码展示:


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main() {
    FILE* fp;//定义文件指针(必须要指针)
    int i;
    char name_classmates[10][20] = { "画眉","夜鹰","鸬鹚","织布鸟","白头翁","白鹭","翠鸟","雕鸮","蜂鸟","海雕" };//十个字符串名字
    for (i = 0; i < 10; i++) {
        strcat(name_classmates[i], ".txt");//txt文件后缀
        if ((fp = fopen(name_classmates[i], "w")) == NULL) {
            printf("%s file open error!\n",name_classmates[i]);
            exit(0);//防止异常,关闭流
        }//逐个建立文件
        if (fclose(fp)) {
            printf("close the file\n");
            exit(0);
        }
    }
    return 0;
}

运行结果:


任务二:

在任务一的基础上,这次不仅仅要创建txt文件,还需要往文件中写入
每个人的学号,性别,班级,线代成绩
代码展示:


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100
#define V 10
int main() {

    system("color F9");
    char number[V][N];//学号
    char sex[V][N];//性别
    char classes[V][N];//班级
    char score[V][N];//分数
    FILE* fp;
    int i;
    char name_classmates[10][20] = { "画眉","夜鹰","鸬鹚","织布鸟","白头翁","白鹭","翠鸟","雕鸮","蜂鸟","海雕" };
    for (i = 0; i < 10; i++) {
        strcat(name_classmates[i], ".txt");
        fp = fopen(name_classmates[i], "w");
        if (fp)
        {
            printf("请输入学生%s的性别:       ", name_classmates[i]);
            scanf("%s", sex[i]);
            printf("请输入学生%s的学号:       ",name_classmates[i]);
            scanf("%s", number[i]);
            printf("请输入学生%s的班级:       ", name_classmates[i]);
            scanf("%s", classes[i]);
            printf("请输入学生%s的分数:       ", name_classmates[i]);
            scanf("%s", score[i]);
            fputs(number[i], fp);
            fprintf(fp, "  ");
            fputs(sex[i], fp);
            fprintf(fp, "  ");
            fputs(classes[i], fp);
            fprintf(fp, "  ");
            fputs(score[i], fp);
            printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
            if (i != 0&&i % 2 == 0)
            {
                system("cls");
                system("pause");
            }
            fclose(fp);//关闭文件
        }
        else
        {
            printf("File open fail.\n");
            break;
        }
    }
    return 0;
}

运行结果截图



任务三:

在任务二生成的文件中,将每个人的信息再重新读取出来,放入数组中。
[要求使用结构体数组,结构体需要包含姓名,学号,性别,班级,线代成绩5个属性]
代码展示

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100
#define V 10
struct student
{
    char name[N];//名字
    char number[N];//学号
    char sex[N];//性别
    char score[N];//分数
    char classes[N];//班级
}stu[10];
int main() {

    system("color F9");
    FILE* fp;
    int i;
    char name_classmates[10][20] = { "画眉","夜鹰","鸬鹚","织布鸟","白头翁","白鹭","翠鸟","雕鸮","蜂鸟","海雕" };
    for (i = 0; i < 10; i++)
    {
        strcpy(stu[i].name, name_classmates[i]);
        strcat(name_classmates[i], ".txt");
        fp = fopen(name_classmates[i], "r");
        if (fp)
        {
            fscanf(fp, "%s %s %s %s", stu[i].number, stu[i].sex, stu[i].classes, stu[i].score);//读取文件内容并放入结构体中
            fclose(fp);
        }

        else
        {
            printf("File open fail.\n");
            break;
        }

    }
    for (i = 0;i < 10;i++)
        {
            printf("%s %s %s %s %s\n\n", stu[i].name, stu[i].number, stu[i].sex, stu[i].classes, stu[i].score);

        }
    return 0;
}

运行结果截图


任务四:

试着使用一下system("cls"),system("pause")这两个命令,看看这两个
命令能不能对你的程序起到一些美化的作用。
拓展:上网搜索类似的其他函数,使用并解释他们的作用。

  1. system("CLS")可以实现清屏操作;
  2. system("pause")可以实现冻结屏幕,便于观察程序的执行结果;
  3. 用 system("color 0A"); 其中color后面的0是背景色代号,A是前景色代号。各颜色代码如下:
    0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A=淡绿色 B=淡浅绿色 C=淡红色 D=淡紫色 E=淡黄色 F=亮白色

    五.小结

    通过这次大作业,我对文件有了以下初步的了解:
    - fopen(),fclose函数是用来打开和关闭文件的,若打开失败,就会返回NULL,函数里放的是打开的文件路径或文件名,参数mode字符串代表流行态。

r以只读的方式打开文件,该文件必须存在
r+r+以可读写方式打开,该文件必须存在
a+打开读写文件文件不存在,则新建,存在。写入的数据会被加到文件尾后,文件原先内容会被保留(原来的EOF不保留)
rw+rw+读写打开一个文本文件,允许读和写
ww打开只写文件,若文件存在则文件长度轻为0,则该文件内容会消失,若文件不存在,则建立该文件
w+a以附加方式打开只写文件,若文件存在,则文件长度会被清零,文件内容会消失
a以附加的方式打开只写文件,若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后(原来的EOF符保留)
at+打开一个叫string的文件,a表示append,写入处理的时候接着原有文件写入,t表示打开文本文件,+表示可读写
wb只写打开或新建一个二进制文件。只允许写数据
wb+读写打开或建立一个二进制文件。允许读和写
ab+读写打开一个二进制文件,允许读或在文件末追加数据
rb+rb+读写打开一个二进制文件,允许读写数据

上述的形态字符串都可以再加一个b字符,如
rb,w+b或ab+等组合,加入b字符用来告诉函数以二进制模式打开文件,如果不加b,表示默认加了t,即rt,wt,其中t表示以文本模式打开文件。
- 格式化方式读写文件:fscanf()函数和fprintf()函数

定义:
fscanf(文件指针,格式字符串,输入表);
fprintf(文件指针,格式字符串,输入表)

- 字符方式读写文件:fgetc(),fputc(),用于复制文件
- 字符串方式文件读写函数fgets()fputs()

作用:
fputs()函数用来向指定的文本文件写入一个字符串
fgets()从文本文件中读取字符串
格式:
fputs(s,fp);
fgets(s,n,fp);//n是指定读入字符的个数 
12-23 03:24
查看更多