文件读取和输入输出

文件指针

在C语言中,文件操作是通过文件指针来进行的。文件指针是一个指向 FILE 结构的指针,用于标识和操作一个文件。

FILE *fp;

常用的文件操作函数

  1. fopen:打开文件。
  2. fclose:关闭文件。
  3. fread:从文件中读取数据。
  4. fwrite:向文件中写入数据。
  5. fscanf 和 fprintf:格式化读取和写入。
  6. fgets 和 fputs:读取和写入字符串。
  7. fseek:设置文件指针的位置。
  8. ftell:获取文件指针的位置。

打开文件 (fopen)

fopen 函数用于打开文件,并返回一个文件指针。如果打开失败,返回 NULL

FILE *fopen(const char *filename, const char *mode);

常用模式:

  1. "r":只读模式。
  2. "w":写模式,文件不存在则创建,存在则清空。
  3. "a":追加模式,文件不存在则创建。
  4. "r+":读写模式,文件必须存在。
  5. "w+":读写模式,文件不存在则创建,存在则清空。
  6. "a+":读写追加模式,文件不存在则创建。

关闭文件 (fclose)

fclose 函数用于关闭文件,释放资源。

int fclose(FILE *fp);

读取文件

fread

fread 函数从文件中读取数据到缓冲区。

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

fscanf

fscanf 函数从文件中读取格式化数据。

int fscanf(FILE *stream, const char *format, ...);

fgets

fgets 函数从文件中读取一行字符串。

char *fgets(char *str, int n, FILE *stream);

写入文件

fwrite

fwrite 函数向文件中写入数据。

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

fprintf

fprintf 函数向文件中写入格式化数据。

int fprintf(FILE *stream, const char *format, ...);

fputs

fputs 函数向文件中写入字符串。

int fputs(const char *str, FILE *stream);

文件指针操作

fseek

fseek 函数设置文件指针的位置。

int fseek(FILE *stream, long offset, int whence);
//SEEK_SET:文件开头。
//SEEK_CUR:当前位置。
//SEEK_END:文件末尾。

ftell

ftell 函数获取当前文件指针的位置。

long ftell(FILE *stream);

错误处理

文件操作过程中可能会遇到错误,常用的错误处理函数包括:

  • ferror:检查文件指针是否有错误。
  • feof:检查文件指针是否到达文件末尾。
  • perror:打印错误信息。

读取文件内容并打印

#include <stdio.h>

int main() {
    FILE *fp = fopen("example.txt", "r");
    if (fp == NULL) {
        perror("Error opening file");
        return -1;
    }

    char buffer[100];
    while (fgets(buffer, 100, fp) != NULL) {
        printf("%s", buffer);
    }

    fclose(fp);
    return 0;
}

向文件写入数据

#include <stdio.h>

int main() {
    FILE *fp = fopen("output.txt", "w");
    if (fp == NULL) {
        perror("Error opening file");
        return -1;
    }

    fprintf(fp, "Hello, World!\n");
    fputs("This is a test.\n", fp);

    fclose(fp);
    return 0;
}

总结

fopen打开文件,并返回文件指针FILE *fopen(const char *filename, const char *mode);FILE *fp = fopen("file.txt", "r");
fread从文件中读取数据到缓冲区size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);fread(buffer, sizeof(char), 100, fp);
fscanf从文件中读取格式化输入int fscanf(FILE *stream, const char *format, ...);fscanf(fp, "%d", &num);
fgets从文件中读取一行字符串char *fgets(char *str, int n, FILE *stream);fgets(buffer, 100, fp);
fgetc从文件中读取一个字符int fgetc(FILE *stream);char c = fgetc(fp);
fseek设置文件指针的位置int fseek(FILE *stream, long offset, int whence);fseek(fp, 0, SEEK_SET);
ftell获取文件指针的位置long ftell(FILE *stream);long pos = ftell(fp);
fclose关闭文件,释放资源int fclose(FILE *fp);fclose(fp);
feof检查文件指针是否到达文件末尾int feof(FILE *stream);if (feof(fp)) { /* End of file */ }
ferror检查文件指针是否有错误int ferror(FILE *stream);if (ferror(fp)) { /* Handle error */ }
perror打印错误信息void perror(const char *str);perror("Error opening file");

打开并读取文件

#include <stdio.h>

int main() {
    FILE *fp;
    char buffer[100];
    int num;

    // 打开文件
    fp = fopen("example.txt", "r");
    if (fp == NULL) {
        perror("Error opening file");
        return -1;
    }

    // 使用 fgets 读取一行字符串
    if (fgets(buffer, 100, fp) != NULL) {
        printf("Read string: %s\n", buffer);
    }

    // 使用 fscanf 读取格式化输入
    if (fscanf(fp, "%d", &num) == 1) {
        printf("Read integer: %d\n", num);
    }

    // 关闭文件
    fclose(fp);

    return 0;
}

使用 fread 读取二进制文件

#include <stdio.h>

int main() {
    FILE *fp;
    char buffer[100];
    size_t bytesRead;

    // 打开二进制文件
    fp = fopen("example.bin", "rb");
    if (fp == NULL) {
        perror("Error opening file");
        return -1;
    }

    // 使用 fread 读取数据到缓冲区
    bytesRead = fread(buffer, sizeof(char), 100, fp);
    printf("Bytes read: %zu\n", bytesRead);

    // 关闭文件
    fclose(fp);

    return 0;
}

输入输出

printf格式化输出到标准输出(通常是屏幕)向控制台打印各种格式化的数据printf("Hello, World!\n");
scanf从标准输入(通常是键盘)读取格式化输入从用户输入获取各种格式化的数据scanf("%d", &num);
getchar从标准输入读取单个字符读取单个字符char c = getchar();
putchar向标准输出写入单个字符输出单个字符putchar('A');

printf 示例

printf 用于格式化输出,可以打印整数、浮点数、字符串等。

#include <stdio.h>

int main() {
    int num = 10;
    float f = 3.14;
    char str[] = "Hello, World!";
    
    // 使用 printf 打印各种类型的数据
    printf("Integer: %d\n", num);
    printf("Float: %.2f\n", f);
    printf("String: %s\n", str);
    
    return 0;
}

scanf 示例

scanf 用于格式化输入,可以从用户输入获取整数、浮点数、字符串等。

#include <stdio.h>

int main() {
    int num;
    float f;
    char str[50];
    
    // 提示用户输入数据
    printf("Enter an integer: ");
    scanf("%d", &num);
    
    printf("Enter a float: ");
    scanf("%f", &f);
    
    printf("Enter a string: ");
    scanf("%s", str);
    
    // 打印用户输入的数据
    printf("You entered: %d, %.2f, %s\n", num, f, str);
    
    return 0;
}

getchar 示例

getchar 用于读取单个字符,可以用于处理字符输入

#include <stdio.h>

int main() {
    char c;
    
    // 提示用户输入一个字符
    printf("Enter a character: ");
    c = getchar();
    
    // 打印用户输入的字符
    printf("You entered: %c\n", c);
    
    return 0;
}

putchar 示例

putchar 用于输出单个字符,可以用于处理字符输出

#include <stdio.h>

int main() {
    char c = 'A';
    
    // 输出字符
    printf("Character output: ");
    putchar(c);
    putchar('\n');
    
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/956111.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

移动端布局 ---- 学习分享

响应式布局实现方法 主流的实现方案有两种: 通过rem \ vw/vh \ 等单位,实现在不同设备上显示相同比例进而实现适配. 响应式布局,通过媒体查询media 实现一套HTML配合多套CSS实现适配. 在学习移动端适配之前,还需要学习移动端适配原理: 移动端适配原理(Viewport) 了解VSCo…

STM32 FreeROTS 任务创建和删除实验(静态方法)

实验目标 学会 xTaskCreateStatic( )和 vTaskDelete( ) 的使用&#xff1a; start_task&#xff1a;用来创建其他的三个任务。task1&#xff1a;实现LED1每500ms闪烁一次。task2&#xff1a;实现LED2每500ms闪烁一次。 task3&#xff1a;判断按键KEY1是否按下&#xff0c;按…

家政服务小程序,打造智慧家政新体验

春节即将来临&#xff0c;家政市场呈现出了火热的场景&#xff0c;大众对家政服务的需求持续增加。 近年来&#xff0c;家政市场开始倾向数字化、智能化&#xff0c;借助科学技术打造家政数字化平台&#xff0c;让大众在手机上就可以预约家政服务&#xff0c;减少传统家政市场…

《贪心算法:原理剖析与典型例题精解》

必刷的贪心算法典型例题&#xff01; 算法竞赛&#xff08;蓝桥杯&#xff09;贪心算法1——数塔问题-CSDN博客 算法竞赛&#xff08;蓝桥杯&#xff09;贪心算法2——需要安排几位师傅加工零件-CSDN博客 算法&#xff08;蓝桥杯&#xff09;贪心算法3——二维数组排序与贪心算…

Vue3 nginx 打包后遇到的问题

前端vite文件配置 export default defineConfig({plugins: [vue(),DefineOptions()],base:./,resolve:{alias:{:/src, //配置指向src目录components:/src/components,views:/src/views}},server:{// host:0.0.0.0,// port:7000,proxy:{/api:{target:xxx, // 目标服务器地址 &am…

linux下配置python环境及库配置

概述 使用Linux作为开发环境拥有完整的开源工具链且易于通过系统包管理器安装&#xff0c;与系统集成良好。对于开源项目开发&#xff0c;能方便地从源代码编译安装软件&#xff0c;使用构建工具&#xff0c;提供更原生的开发环境。 可高度定制系统&#xff0c;满足特殊开发需求…

【机器学习实战入门】使用OpenCV进行性别和年龄检测

Gender and Age Detection Python 项目 首先,向您介绍用于此高级 Python 项目的性别和年龄检测中的术语: 什么是计算机视觉? 计算机视觉是一门让计算机能够像人类一样观察和识别数字图像和视频的学科。它面临的挑战大多源于对生物视觉有限的了解。计算机视觉涉及获取、处…

左神算法基础提升--4

文章目录 树形dp问题Morris遍历 树形dp问题 求解这个问题需要用到我们在基础班上学到的从节点的左子树和右子树上拿信息的方法。 求最大距离主要分为两种情况&#xff1a;1.当前节点参与最大距离的求解&#xff1b;2.当前节点不参与最大距离的求解&#xff1b; 1.当前节点参与最…

spark任务优化参数整理

以下参数中有sql字眼的一般只有spark-sql模块生效&#xff0c;如果你看过spark的源码&#xff0c;你会发现sql模块是在core模块上硬生生干了一层&#xff0c;所以反过来spark-sql可以复用core模块的配置&#xff0c;例外的时候会另行说明&#xff0c;此外由于总结这些参数是在不…

华为数据中心CE系列交换机级联M-LAG配置示例

M-LAG组网简介 M-LAG&#xff08;Multi-chassis Link Aggregation&#xff09;技术是一种跨设备的链路聚合技术&#xff0c;它通过将两台交换机组成一个逻辑设备&#xff0c;实现链路的负载分担和故障切换&#xff0c;从而提高网络的可靠性和稳定性。下面给大家详细介绍如何在…

游戏引擎学习第80天

Blackboard&#xff1a;增强碰撞循环&#xff0c;循环遍历两种类型的 t 值 计划对现有的碰撞检测循环进行修改&#xff0c;以便实现一些新的功能。具体来说&#xff0c;是希望处理在游戏中定义可行走区域和地面的一些实体。尽管这是一个2D游戏&#xff0c;目标是构建一些更丰富…

EMS专题 | 守护数据安全:数据中心和服务器机房环境温湿度监测

您需要服务器机房温度监测解决方案吗&#xff1f; 服务器机房是企业中用于存储、管理和维护服务器及其相关组件的设施。服务器机房通常位于数据中心内&#xff0c;是一个专门设计的物理环境&#xff0c;旨在确保服务器的稳定运行和数据的安全性。服务器机房主要起到存储和管理数…

4 AXI USER IP

前言 使用AXI Interface封装IP&#xff0c;并使用AXI Interface实现对IP内部寄存器进行读写实现控制LED的demo&#xff0c;这个demo是非常必要的&#xff0c;因为在前面的笔记中基本都需哟PS端与PL端就行通信互相交互&#xff0c;在PL端可以通过中断的形式来告知PS端一些事情&…

网络编程 | UDP套接字通信及编程实现经验教程

1、UDP基础 传输层主要应用的协议模型有两种&#xff0c;一种是TCP协议&#xff0c;另外一种则是UDP协议。在上一篇博客文章中&#xff0c;已经对TCP协议及如何编程实现进行了详细的梳理讲解&#xff0c;在本文中&#xff0c;主要讲解与TCP一样广泛使用了另一种协议&#xff1a…

A5.Springboot-LLama3.2服务自动化构建(二)——Jenkins流水线构建配置初始化设置

下面我们接着上一篇文章《A4.Springboot-LLama3.2服务自动化构建(一)——构建docker镜像配置》继续往下分析,在自动化流水线构建过程当中的相关初始化设置和脚本编写。 一、首先需要先安装Jenkins 主部分请参考我前面写的一篇文章《Jenkins持续集成与交付安装配置》 二、…

开发神器之cursor

文章目录 cursor简介主要特点 下载cursor页面的简单介绍切换大模型指定ai学习的文件指定特定的代码喂给ai创建项目框架文件 cursor简介 Cursor 是一款专为开发者设计的智能代码编辑器&#xff0c;集成了先进的 AI 技术&#xff0c;旨在提升编程效率。以下是其主要特点和功能&a…

基于机器学习随机森林算法的个人职业预测研究

1.背景调研 随着信息技术的飞速发展&#xff0c;特别是大数据和云计算技术的广泛应用&#xff0c;各行各业都积累了大量的数据。这些数据中蕴含着丰富的信息和模式&#xff0c;为利用机器学习进行职业预测提供了可能。机器学习算法的不断进步&#xff0c;如深度学习、强化学习等…

【王树森搜索引擎技术】概要01:搜索引擎的基本概念

1. 基本名词 query&#xff1a;查询词SUG&#xff1a;搜索建议文档&#xff1a;搜索结果标签/筛选项 文档单列曝光 文档双列曝光 2. 曝光与点击 曝光&#xff1a;用户在搜索结果页上看到文档&#xff0c;就算曝光文档点击&#xff1a;在曝光后&#xff0c;用户点击文档&…

图论DFS:黑红树

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法&#xff1a;记忆化搜索DFS 算法&#xf…

ros2-7.5 做一个自动巡检机器人

7.5.1 需求及设计 又到了小鱼老师带着做最佳实践项目了。需求&#xff1a;做一个在各个房间不断巡逻并记录图像的机器人。 到达目标点后首先通过语音播放到达目标点信息&#xff0c; 再通过摄像头拍摄一张图片保存到本地。 7.5.2 编写巡检控制节点 在chapt7_ws/src下新建功…