IO接口 2月5日学习笔记

1.fgetc 

        用于从文件中读取一个字符,fgetc 函数每次调用将会返回当前文件指针所指向的字符,并将文件指针指向下一个字符。


     int fgetc(FILE *stream);

      功能:
        从流中读取下一个字符
      参数:
        stream:文件流指针
      返回值:
        成功返回读到字符的ASCII码值
        失败返回EOF
        读到文件末尾返回EOF

#include <stdio.h>

int main(void)
{
	FILE *fp = NULL;
	char ch = 0;

	fp = fopen("file.txt", "r");
	if (NULL == fp)
	{
		perror("fail to fopen");
		return -1;
	}
	
	while (1)
	{
		ch = fgetc(fp);
		if (EOF == ch)  // 读到末尾退出循环
		{
			break;
		}
		printf("ch = %c\n", ch);
	}

	fclose(fp);

	return 0;
}

统计文件的行数   
 

#include <stdio.h>

int main(void)
{
	FILE *fp = NULL;
	char ch = 0;
	int cnt = 0;

	fp = fopen("file.txt", "r");
	if (NULL == fp)
	{
		perror("fail to fopen");
		return -1;
	}

	while (1)
	{
		ch = fgetc(fp);
		if (EOF == ch)
		{
			break;
		}

		if ('\n' == ch)
		{
			cnt++;
		}
	}

	fclose(fp);

	printf("cnt = %d\n", cnt);

	return 0;
}

  2.fgetc/fputc与getchar/putchar的区别


        char ch = 0;
        ch = getchar();
        ch = fgetc(stdin);

        char ch = 'a'
        putchar(ch);
        fputc(ch, stdout);

fgetc 和 fputc 主要用于文件操作,需要指定文件流作为参数;而getchar 和 putchar 主要用于标准输入输出,直接与控制台交互,不需要额外指定文件。

实现将一个文件中的内容拷贝到另一个文件中

#include <stdio.h>

int main(void)
{
	FILE *fsrc = NULL;
	FILE *fdst = NULL;
	char tmp = 0;

	fsrc = fopen("src.txt", "r");
	if (NULL == fsrc)
	{
		perror("fail to fopen");
		return -1;
	}

	fdst = fopen("dst.txt", "w");
	if (NULL == fdst)
	{
		perror("fail to fopen");
		return -1;
	}

	while (1)
	{
		tmp = fgetc(fsrc);
		if (EOF == tmp)
		{
			break;
		}
		fputc(tmp, fdst);
	}

	fclose(fsrc);
	fclose(fdst);

	return 0;
}

    3.fputs

         int fputs(const char *s, FILE *stream);
      功能:
        向流中写入一个字符串
      参数:
        s:字符串首地址
        stream:文件流指针
      返回值:
        成功返回非负数
        失败返回EOF

#include <stdio.h>

int main(void)
{
	FILE *fp = NULL;
	char str[32] = {"hello world"};

	fp = fopen("file.txt", "w");
	if (NULL == fp)
	{
		perror("fail to fopen");
		return -1;
	}

	fputs(str, fp);

	fclose(fp);

	return 0;
}

    4.fgets

 char *fgets(char *s, int size, FILE *stream);
      功能:
        从流中读取一个字符串
      参数:
        s:存放字符串空间首地址
        size:最多读取字符的个数
        stream:文件流指针
      返回值:
        成功返回存放字符串空间的首地址
        失败返回NULL
        读到文件末尾返回NULL

#include <stdio.h>

int main(void)
{
	FILE *fp = NULL;
	char tmpbuff[3] = {0};
	
	fp = fopen("file.txt", "r");
	if (NULL == fp)
	{
		perror("fail to fopen");
		return -1;
	}

	fgets(tmpbuff, sizeof(tmpbuff), fp);
	printf("tmpbuff = %s\n", tmpbuff);

	fclose(fp);

	return 0;
}

        gets和fgets区别:
        1.gets没有给定最多读取字符的个数,有越界风险
          fgets需要给定最多读取的字符个数,没有越界风险
        2.gets会去掉从终端接收的\n字符,换成\0字符
          fgets会保留从终端接收的\n字符,并在其末尾加入\0

        puts和fputs的区别
        1.puts会在字符串末尾多打印一个\n字符 
        2.fputs不会在末尾多打印\n字符

拷贝文件中的内容

#include <stdio.h>

int main(void)
{
	FILE *fsrc = NULL;
	FILE *fdst = NULL;
	char tmpbuff[4096] = {0};
	char *pret = NULL;

	fsrc = fopen("src.txt", "r");
	if (NULL == fsrc)
	{
		perror("fail to fopen");
		return -1;
	}

	fdst = fopen("dst.txt", "w");
	if (NULL == fdst)
	{
		perror("fail to fopen");
		return -1;
	}
	
	while (1)
	{
		pret = fgets(tmpbuff, sizeof(tmpbuff), fsrc);
		if (NULL == pret)
		{
			break;
		}
		fputs(tmpbuff, fdst);
	}

	fclose(fsrc);
	fclose(fdst);

	return 0;
}


5.fwrite 


      size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
      功能:
        向流中写入nmemb个对象,每个对象size字节大小,在ptr指向的空间中
      参数:
        ptr:存放数据空间的首地址
        size:每个数据对象的大小
        nmemb:数据对象的个数
        stream:文件流指针
      返回值:
        成功返回写入对象的个数
        失败返回0
        读到文件末尾返回0 

#include <stdio.h>

typedef struct student 
{
	char name[32];
	char sex;
	int age;
	int score;
}stu_t;

int main(void)
{
	stu_t a = {"zhangsan", 'm', 19, 100};
	stu_t b = {"lisi", 'f', 18, 90};
	stu_t s[3] = {
		{"zhaowu", 'm', 19, 100},
		{"maliu", 'f', 18, 65},
		{"tianqi", 'm', 17, 90},
	};
	FILE *fp = NULL;

	fp = fopen("file.txt", "w");
	if (NULL == fp)
	{
		perror("fail to fopen");
		return -1;
	}

	fwrite(&a, sizeof(stu_t), 1, fp);
	fwrite(&b, sizeof(stu_t), 1, fp);
	fwrite(s, sizeof(stu_t), 3, fp);

	fclose(fp);

	return 0;
}

   2.fread 
      size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
      功能:
        从流中读取nmemb个对象,每个对象size个字节,存放到ptr指向的空间中
      参数:
        ptr:存放读取内容空间首地址
        size:读取对象的大小
        nmemb:读取对象的个数
        stream:文件流指针 
      返回值:
        成功返回读到对象个数
        失败返回0
        读到文件末尾返回0 

   练习:
        1.利用fread和fwrite完成将src.jpg图片内容拷贝到dst.jpg图片中 
            char tmpbuff[4096];

    3.fprintf 
      int fprintf(FILE *stream, const char *format, ...);
      功能:
        将格式化字符串输出到stream指向的流中

        printf
        fprintf(stdout, );

    4.fsancf 
      int fscanf(FILE *stream, const char *format, ...);
      功能:
        从流中读取格式化的字符串
    
2.流的定位:
    1.ftell
      long ftell(FILE *stream);
      功能:
        获得流的偏移量

    2.rewind
      void rewind(FILE *stream);
      功能:
        将流的偏移量重新设置到开头

    3.fseek 
      int fseek(FILE *stream, long offset, int whence);
      功能:
        设置流的偏移量
      参数:
        stream:文件流指针
        offset:偏移量
            > 0 向后偏移
            < 0 向前偏移
        whence:
            SEEK_SET    文件开头
            SEEK_CUR    文件当前位置
            SEEK_END    文件末尾

#include <stdio.h>

int main(void)
{
	FILE *fp = NULL;

	fp = fopen("file.txt", "w");
	if (NULL == fp)
	{
		perror("fail to fopen");
		return -1;
	}

	fseek(fp, 10, SEEK_SET);
	fputc('a', fp);

	fseek(fp, -5, SEEK_CUR);
	fputc('b', fp);

	fseek(fp, 0, SEEK_SET);
	fputc('c', fp);

	fclose(fp);

	return 0;
}

    练习:从终端输入一个单词,获得单词的含义,格式如下

a                indef art one
abacus           n.frame with beads that slide along parallel rods, used for teaching numbers to children, and (in some countries) for counting
abandon          v.  go away from (a person or thing or place) not intending to return; forsake; desert
abandonment      n.  abandoning
abase            v. ~ oneself/sb lower oneself/sb in dignity; degrade oneself/sb ;
abash            to destroy the self-possession or self-confidence of:disconcert
abashed          adj. ~ embarrassed; ashamed
abate            v. make or become less
abattoir         n. = slaughterhouse (slaughter)
abbess           n. woman who is head of a convent or nunnery
abbey            n.  buildingin which monks or nuns live as a community under an abbot or abbess
abbot            n. man who is head of a monastery or abbey
abbreviate       v. ~ sth shorten (a word, phrase, etc), esp by omitting letters
abbreviation     n.  abbreviating or being abbreviated
abdicate         v.  resign from or formally renounce the throne
abdication       giving up control, authority
abdomen          n.  part of the body below the chest and diaphragm, containing the stomach, bowels and digestive organs
abdominal        adj. in, of or for the abdomen

#include <stdio.h>
#include <string.h>

int main(void)
{
	char word[256] = {0};
	char tmpbuff[4096] = {0};
	FILE *fp = NULL;
	char *pret = NULL;
	char *ptmp = NULL;

	gets(word);

	fp = fopen("dict.txt", "r");
	if (NULL == fp)
	{
		perror("fail to fopen");
		return -1;
	}

	while (1)
	{
		pret = fgets(tmpbuff, sizeof(tmpbuff), fp);
		if (NULL == pret)
		{
			break;
		}

		ptmp = tmpbuff;
		while (*ptmp != ' ' && *ptmp != '\0')
		{
			ptmp++;
		}
		*ptmp = '\0';
		ptmp++;
		while (*ptmp == ' ')
		{
			ptmp++;
		}
		
		if (0 == strcmp(tmpbuff, word))
		{
			printf("%s", ptmp);
			fclose(fp);
			return 0;
		}
	}
	
	fclose(fp);
	printf("%s 单词不存在!\n", word);

	return 0;
}

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

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

相关文章

嵌入式驱动学习第二周——断言机制

前言 这篇博客来聊一聊C/C的断言机制。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博主并订阅本专栏&#xff0c;一起讨论一起学习。现在关注就是老粉啦&#xff01; 目录 前言1. 断言介绍…

鸿蒙实战应用开发:【拨打电话】功能

概述 本示例通过输入电话&#xff0c;进行电话拨打&#xff0c;及电话相关信息的显示。 样例展示 涉及OpenHarmony技术特性 网络通信 基础信息 拨打电话 介绍 本示例使用call相关接口实现了拨打电话并显示电话相关信息的功能 效果预览 使用说明 1.输入电话号码后&#…

枚举与尺取法(蓝桥杯 c++ 模板 题目 代码 注解)

目录 组合型枚举&#xff08;排列组合模板&#xff08;&#xff09;&#xff09;: 排列型枚举&#xff08;全排列&#xff09;模板&#xff1a; 题目一&#xff08;公平抽签 排列组合&#xff09;&#xff1a; ​编辑 代码&#xff1a; 题目二&#xff08;座次问题 全排…

寒假作业Day 06

寒假作业Day 06 一、选择题 1、关于内存管理&#xff0c;以下有误的是&#xff08; &#xff09; A: malloc在分配内存空间大小的时候是以字节为单位 B: 如果原有空间地址后面还有足够的空闲空间用来分配&#xff0c;则在原有空间后直接增加新的空间&#xff0c;使得增加新空…

No matching version found for @babel/traverse@^7.24.0.

问题&#xff1a; npm安装 依赖失败&#xff0c;找不到所需依赖。 原因&#xff1a; npm镜像源中没有该依赖。&#xff08;大概率是因为依赖最近刚更新&#xff0c;当前镜像源没有同步&#xff09; 解决&#xff1a; 查看自己的npm镜像&#xff1a;npm config get registry…

【刷题记录】详谈设计循环队列

下题目为个人的刷题记录&#xff0c;在本节博客中我将详细谈论设计循环队列的思路&#xff0c;并给出代码&#xff0c;有需要借鉴即可。 题目&#xff1a;LINK 下面是思路分析: 首先一开始收到实现普通队列的思路影响上题目中循环这俩字&#xff0c;那自然想到的是用链表来设计…

IDEA自动导入provided的依赖

最近在学习flink 流程序&#xff0c;在写demo程序的时候依赖flink依赖&#xff0c;依赖的包在flink集群里面是自己已经提供了的&#xff0c;在导入的时候配置为provided&#xff0c;像下面这样&#xff0c;以使打包的时候不用打到最终的程序包里面。 <dependency><gro…

带你从Spark官网啃透Spark Structured Streaming

By 远方时光原创&#xff0c;可转载&#xff0c;open 合作微信公众号&#xff1a;大数据左右手 本文是基于spark官网结构化流解读 Structured Streaming Programming Guide - Spark 3.5.1 Documentation (apache.org) spark官网对结构化流解释 我浓缩了一些关键信息&#xff…

laravel8配合jwt

composer 安装包 composer require tymon/jwt-authconfig/app.php 注册服务提供者 providers > [Tymon\JWTAuth\Providers\LaravelServiceProvider::class, ]aliases > [JWTAuth > Tymon\JWTAuth\Facades\JWTAuth::class,JWTFactory > Tymon\JWTAuth\Facades\JWT…

如何把已安装的nodejs高版本降级为低版本

第一步.先清空本地安装的node.js版本 按健winR弹出窗口&#xff0c;键盘输入cmd,然后敲回车&#xff08;或者鼠标直接点击电脑桌面最左下角的win窗口图标弹出&#xff0c;输入cmd再点击回车键&#xff09; 然后进入命令控制行窗口&#xff0c;并输入where node查看之前本地安装…

[java] 23种设计模式之桥接模式

一、什么是桥接模式 桥接(Bridge)模式属于结构型设计模式。通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。把抽象(abstraction)与行为实现(implementation)分离开来&#xff0c;从而可以保持各部分的独立性以及应对它们的功能扩展。 二、适用场景 当一…

《互联网的世界》第四讲-拥塞控制与编码

需要澄清的一个误区是&#xff0c;拥塞绝不是发送的数据量太大导致&#xff0c;而是数据在极短的时间段内到达了同一个地方以至于超过了网络处理容量导致&#xff0c;拥塞的成因一定要考虑时间因素。换句话说&#xff0c;拥塞由大突发导致。 只要 pacing&#xff0c;再多的数据…

软考59-上午题-【数据库】-小结+杂题

一、杂题 真题1&#xff1a; 真题2&#xff1a; 真题3&#xff1a; 真题4&#xff1a; 真题5&#xff1a; 真题6&#xff1a; 真题7&#xff1a; 真题8&#xff1a; 二、数据库总结 考试题型&#xff1a; 1、选择题&#xff08;6题&#xff0c;6分&#xff09; 2、综合分析题…

python实现手机号归属地查询

手机上突然收到了某银行的短信提示&#xff0c;看了一下手机的位数&#xff0c;正好是11位。我一想&#xff0c;这不就是标准的手机号码吗&#xff1f;于是一个想法涌上心头——用python的库实现查询手机号码归属地查询自由。 那实现的效果如下&#xff1a; 注&#xff1a;电…

五、软考-系统架构设计师笔记-信息安全技术基础知识

信息安全技术基础知识 1、信息安全基础知识概述 信息安全的概念 信息安全包括 5 个基本要素&#xff1a; 机密性:确保信息不暴露给未授权的实体或进程。完整性:只有得到允许的人才能修改数据&#xff0c;并且能够判别出数据是否已被篡改。可用性:得到授权的实体在需要时可以…

“祖传代码“的是是非非

程序员眼中的“祖传代码”&#xff0c;就像一本古老而神秘的魔法书&#xff0c;藏着无穷的智慧和技巧&#xff0c;有些代码像家传宝贝&#xff0c;有些像祖传秘方。快来分享一下你遇到的“祖传代码”吧~ 祖传代码的历史与文化价值 祖传代码通常指的是经过长时间使用和传承的代…

于51单片机的智能驾驶系统设计[proteus仿真]

基于51单片机的智能驾驶系统设计[proteus仿真] 智能驾驶检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的智能驾驶系统设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xffe5;&…

大话C++之:对象内存模型

一般继承(无虚函数覆盖) 只有一个虚指针&#xff0c;指向一个虚表&#xff0c;虚函数按顺序从祖先节点开始插入到虚表上。字段按顺序从祖先节点开始插入到对象内存上 一般继承(有虚函数覆盖) 只有一个虚指针&#xff0c;指向一个虚表&#xff0c;虚函数按顺序从祖先节点开始&a…

嵌入式中volatile关键字的使用方法

Hi,大家好&#xff01; 今天我们来学习一下volatile关键字&#xff0c;volatile关键字想必大家在平时编程中都见过或用过。可是小伙伴们有没有想过什么时候需要使用volatile关键字吗&#xff1f; 在C语言中&#xff0c;volatile是一个关键字&#xff0c;用于告诉编译器不要优化…

绘图机器 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 绘图机器的绘图笔初始位置在原点&#xff08;0, 0&#xff09;&#xff0c;机器启动后其绘图笔按下面规则绘制直线&#xff1a; 1&#xff09;尝试沿着横向坐标轴…