当前位置: 首页 > article >正文

学校C语言实验——文件

本文章为非计算机学院的实验以及解答,也是用最基础最入门的方式写完的!

        老规矩,先写上头文件:

#include "stdafa.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

        因为我写C都是抱着头文件可以多不能少的思路弄得,所以头文件会长一些。

        这里还需要补充一下:如果一下代码您使用后是乱码的话,那可能是txt文件的格式不正确们需要打开txt文件,点击文件->另存为->选在地方,保存的左边有一个格式的调成ASNI即可

        正文:

一、自己用记事本输入一些文字(可以是汉字),然后写程序:

        (1)将文件内容输出到屏幕

        (2)将它复制并生成另一文本文件。

1.1将文件内容输出到屏幕

        先把文本文档内容放在下面:

        在完成1.1时我发现我当时写C语言实验的代码不能用了,然后用了几个函数都=都是不能完整输出,所以最后迫不得已使用了fscanf函数读取文件。具体每个函数有什么问题,我暂时还没有找出来,希望知道的大佬博主或者大佬读者们可以联系我,我这里会把所以代码给出,放到目录,不愿意看的可以直接看正确的代码。

        可以正确输出的fscanf函数代码:
int main() {
    FILE* fp;
    char str[1024];
    int len;
    fp = fopen("C:\\Users\\31869\\source\\repos\\C语言实验\\回答.txt", "r");
    if (fp == NULL){
        perror("ERROR!!!");
        exit(1);
    }
    while (fscanf(fp, "%s", str) != EOF) {
        printf("%s", str);
    }
    fclose(fp);
    system("pause");
    return 0;
}

       下面来解释一下,因为我的txt没有跟程序弄到同一个文档上,所以开始运行的时候总是找不到文件,所以使用了perror函数,这个函数很好用,可以直接告诉我报错的原因。

        对于不在一个同一个文件夹下的txt或者其他文件,想要打开就要如同我这个回答.txt一样。

        但是这个格式依然不理想,如下:

        fgetc函数:
int main() {
    FILE* fp;
    char ch;
    char str[1024];
    int len;
    fp = fopen("C:\\Users\\31869\\source\\repos\\C语言实验\\回答.txt", "r");
    if (fp == NULL){
        perror("ERROR!!!");
        exit(1);
    }
    while ((ch = fgetc(fp)) != EOF) {
        putchar(ch);
    }
    fclose(fp);
    system("pause");
    return 0;
}

        运行结果如下,展示了最后一行:

        fgets函数:
int main() {
    FILE* fp;
    char ch;
    char str[1024];
    int len;
    fp = fopen("C:\\Users\\31869\\source\\repos\\C语言实验\\回答.txt", "r");
    if (fp == NULL){
        perror("ERROR!!!");
        exit(1);
    }
    while (fgets(str, sizeof(str), fp) != NULL) {
        printf("%s", str);
    }
    fclose(fp);
    system("pause");
    return 0;
}

        运行结果:

1.2复制到另一文本文件

        代码:

int main() {
    FILE* fp ,* gp;
    char ch;
    char str[1024];
    int len;
    fp = fopen("C:\\Users\\31869\\source\\repos\\C语言实验\\回答.txt", "r");
    if (fp == NULL){
        perror("ERROR!!!");
        exit(1);
    }
    gp = fopen("C:\\Users\\31869\\source\\repos\\C语言实验\\复制.txt", "r+");
    while((ch=fgetc(fp))!=EOF){
        fputc(ch, gp);
    }
    printf("finish copy!\n");
    fclose(fp);
    system("pause");
    return 0;
}

        运行结果如下:

        事先声明,这绝对不是我自己打进去的嗷,不信你们可以自己试一试。

二、编写一程序,把从键盘读取文字并存入mytest1.txt中,输入时以字符^z(ASCII码26或EOF)作为结束

        代码:

int main() {
    FILE* fp; char ch;
    if ((fp = fopen("C:\\Users\\31869\\source\\repos\\C语言实验\\mytest1.txt", "w+")) == NULL) {
        perror("error!");   
        exit(0); 
    }
    printf("写入(以^Z 结尾):\n");
    ch = getchar();
    while (ch != 26)
    {
        fputc(ch, fp);
        ch = getchar();
    }
    rewind(fp);
    while ((ch = fgetc(fp)) != EOF)
        putchar(ch);
    printf("\n");
    fclose(fp);
    return 0;
}

        其实^Z就是Ctrl+Z结束,也是26或者EOF结束。

下面看输入和运行结果:

        txt:

好了,这个完美解决。

三、对以下结构

typedef struct student{

   int no;      //学号

   char name[10];   //姓名

   int score;     //成绩

}STUD; 

1、main中定义数组a[3],b[3];

2、写indata函数从键盘输入数据到数组a[3]中;

3、写函数outdata输出a[3];

4、写writef函数将a[3]存入文件“student.txt”中;

5、写readf函数将文件“student.txt”读取到数组b[3];

6、输出数组b[3]中的数据。

 T3代码

        indata函数:
void indata(STUD* p, int n) {
    int i;
    for (i = 0;i < n;i++) {
        scanf("%d,%s,%d", &(p[i].no), p[i].name, &(p[i].score));
    }
}

        outdata函数:

void outdata(STUD* p, int n) {
    for (int i = 0;i < n;i++)
        printf("%d %s %d\n", p[i].no, p[i].name, p[i].score);
}

        writef函数:

void writef(STUD* p, int n) {
    FILE* fp;
    fp = fopen("C:\\Users\\31869\\source\\repos\\C语言实验\\student.txt", "w+");
    for (int i = 0;i < n;i++)
        fprintf(fp, "%d %s %d \n",
            p[i].no, p[i].name, p[i].score);
    fclose(fp);
}

        readf函数:

void readf(STUD* p, int n) {
    FILE* fp;
    fp = fopen("d:\\student.txt", "rb");
    for (int i = 0;i < n;i++)
        fscanf(fp, "%d%s%d",
            &(p[i].no), p[i].name, &(p[i].score));
    fclose(fp);
}

        完整代码:

typedef struct student {
    int no;
    char name[10];
    int score;
}STUD;

void indata(STUD* p, int n);
void outdata(STUD* p, int n);
void writef(STUD* p, int n);
void readf(STUD* p, int n);

int main() {
    STUD a[3], b[3];
    indata(a, 3);
    outdata(a, 3);
    writef(a, 3);
    readf(b, 3);
    outdata(b, 3);
}

void indata(STUD* p, int n) {
    int i;
    for (i = 0;i < n;i++) {
        scanf("%d,%s,%d", &(p[i].no), p[i].name, &(p[i].score));
    }
}

void outdata(STUD* p, int n) {
    for (int i = 0;i < n;i++)
        printf("%d %s %d\n", p[i].no, p[i].name, p[i].score);
}

//格式读写
void writef(STUD* p, int n) {
    FILE* fp;
    fp = fopen("C:\\Users\\31869\\source\\repos\\C语言实验\\student.txt", "w+");
    for (int i = 0;i < n;i++)
        fprintf(fp, "%d %s %d \n",
            p[i].no, p[i].name, p[i].score);
    fclose(fp);
}

void readf(STUD* p, int n) {
    FILE* fp;
    fp = fopen("d:\\student.txt", "rb");
    for (int i = 0;i < n;i++)
        fscanf(fp, "%d%s%d",
            &(p[i].no), p[i].name, &(p[i].score));
    fclose(fp);
}

T3运行结果:

        输入:

        student.txt:

四、总结:

        到了这里,我们的C语言所有实验就弄完了,但是我在另一篇完整中说过后续会更新一下关于排序或者矩阵的博客,看大家投票,更更想要看哪个,之后就发哪个吧。

        


http://www.kler.cn/a/510193.html

相关文章:

  • ASP.NET Core中 JWT 实现无感刷新Token
  • RabbitMQ-消息可靠性以及延迟消息
  • 微透镜阵列精准全检,白光干涉3D自动量测方案提效70%
  • OpenGL —— 基于Qt的视频播放器 - ffmpeg硬解码,QOpenGL渲染yuv420p或nv12视频(附源码)
  • 【论文阅读】基于空间相关性与Stacking集成学习的风电功率预测方法
  • 从AI生成内容到虚拟现实:娱乐体验的新边界
  • 新星杯-ESP32智能硬件开发--ESP32系统
  • 常在道中
  • awk命令进阶
  • LlamaIndex环境配置
  • JAVA常用得工具类大全《持续更新》
  • 《目标检测数据集下载地址》
  • Cloud Foundry,K8S,Mesos Marathon弹性扩缩容特性对比
  • Spring Boot 整合 Shiro详解
  • 在线图片转为excel工具
  • Golang Gin系列-4:Gin Framework入门教程
  • Python自动化测试中定位隐藏菜单元素的策略
  • html的iframe页面给帆软BI发送消息
  • 具身导航如何利用取之不尽的网络视频资源!RoomTour3D:基于几何感知的视频-指令训练调优
  • Web前端开发技术之HTMLCSS知识点总结
  • 用nginx正向代理https网站
  • 数据结构(链表 哈希表)
  • LeetCode:78.子集
  • AI面板识别
  • 统计学习算法——决策树
  • Hadoop•用Web UI查看Hadoop状态词频统计