IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c语言第四周 -> 正文阅读

[C++知识库]c语言第四周

c语言小白笔记

1.结构体:
结构体本质就是自定义函数类型。
类型名称:struct ;
结构体名称可以理解成一张图纸;
结构体的定义:

struct 结构体名称{
   数据类型  成员名称;
   ........
}

结构体变量:struct 结构体名称 变量名;
如何访问结构体变量中的成员?
结构体变量,成员名称,表示结构体变量中的成员;
2.结构体指针:
1.结构体指针变量 struct 结构体名称 *p;
->:指向运算符
格式:结构体指针变量 ->成员名称:表示指针指向的结构体变量的某个成员;
2.如何通过指针访问结构体变量成员
(1).(*指针变量) 成员名称
(2).指针变量-> 成员名称
3.指针操作数组每一个元素的方式:
p++;(*p).成员名称;p->成员名称;p[i].成员名称;

嵌套结构体

1.定义结构体时,结构体中的类型应该是已经存在过的类型;
2.如果嵌套结构体,那么该结构体在之前就应该已经定义过;
3.每一个结构体变量只能访问自己的成员,如果有嵌套体结构要一级一级访问;

结构体对齐原则

1.每个成员按照自己的字节数对齐;
2.最后总的字节数是最大对齐数的整数倍;如果不是,补齐到第一个整数倍为止;
3.结构体按照自己最大的对齐数对齐;
4.数组按照元素的大小对齐;

typedef:

给已经存在的数据类型取一个别名;
语法:typedef 已经存在的类型名 别名;

运算符优先级(由高到低):

1.();[];->;
2.单目运算符:++;–;&;!;(强转);;sizeof();
3.算术运算符:先:
;/;%;后:+;-;
4.关系运算符:先:!=;==;后:> ;>=;<;<=;
5.逻辑运算符:先:&&;后:||;
6.条件(三目)运算符:表达式1?表达式2:表达式三;
7.赋值运算符:=;+=;-=;*=;自左向右;
8.逗号运算符;

文件操作的步骤

1.打开文件,将应用程序和文件建立关联;
2.读,写文件操作;
3.关闭文件;

fopen的用法

#include <stdio.h>

#if   0
  FILE *fopen(const char *pathname, const char *mode);

 函数功能:  打开文件

 参数说明:  
 pathname:  文件路径
 mode    :  打开模式  (文本文件操作的方式: r  w   a, 二进制文件操作的方式:rb  wb  ab)

 返回值:  成功返回结构体的起始起始
           失败返回NULL

#endif


int main()
{
	FILE *fp = NULL;
#if   0
1、以读的方式打开文件,如果文件不存在,打开失败!
2、以写的方式打开文件,如果文件不存在,创建文件,如果文件存在,清空文件中所有的内容
3、以追加的方式打开文件,如果文件不存在,创建文件, 如果文件存在,不清空内容,文件指针指向内容的最后
#endif
	//fp = fopen("./data.txt", "rb");
	//fp = fopen("./data.txt", "wb");
	fp = fopen("./data.txt", "ab");

	if(NULL == fp)  //打开文件失败
	{
		perror("fopen");
		return -1;
	}

	printf("打开文件成功!\n");
	return 0;
}

fwrite的用法

#include <stdio.h>


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

函数功能:  以二进制的方式写文件

参数说明:

ptr:  写数据的起始地址    

size:  数据的单位大小

nmemb:数据的个数

stream:  文件指针


返回值:返回成功写进去的个数


#endif


int main()
{
	//1、打开文件
	FILE *fp = NULL;
	fp = fopen("./data.txt", "wb");

	if(NULL == fp)
	{
		perror("fopen");
		return -1;
	}

	//2、写文件
	int data[5] = {1,2,3,4,5};

    int ret;
	ret = fwrite(data, sizeof(int), 5, fp);
	if(ret<5)
	{
		perror("fwrite");
		return -1;
	}

	printf("写入成功!\n");


	//3、关闭文件
	fclose(fp);
	return 0;
}

fread的用法

#include <stdio.h>

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

 函数说明:  以二进制的方式读文件

 参数说明:  

 ptr:  存放读数据内存的起始地址

 size : 数据的单位大小


 nmemb:  读数据的个数

 stream : 文件指针


 返回值: 返回值等于0  ,表示到达文件结尾!!!!

#endif

int main()
{
	FILE *fp = NULL;
    // 1、打开文件
	fp  = fopen("./data.txt", "rb");
	if(NULL == fp)
	{
		perror("fopen");
		return -1;
	}


    int data[100];
	int temp;
	int i = 0;
    int ret;

	//2、读文件
    while(1)
	{
		ret = fread(&temp, sizeof(int), 1, fp);
		if(0 == ret)  //说明到达文件结尾
		{
			break;
		}
		data[i] = temp;
		i ++;
	}

	//3、关闭文件
	fclose(fp);

	for(int j=0; j<i; j++)
	{
		printf("%d ", data[j]);
	}
	printf("\n");

	return 0;
}

fprintf的用法

#include <stdio.h>


struct student
{
	int num;
	char name[32];
};



int main()
{
	FILE *fp = NULL;

	fp = fopen("./data.txt", "w");
	if(NULL == fp)
	{
		perror("fopen");
		return -1;
	}

	struct student s1 = {1001, "zhangsan"};
    int ret;
	ret = fprintf(fp, "%d\t%s\n", s1.num, s1.name);

	if(ret<0)
	{
		perror("fprintf");
		fclose(fp);
		return -1;
	}


	fclose(fp);
	return 0;
}

fscanf的用法

#include <stdio.h>

struct student
{
	int num;
	char name[32];
};



int main()
{
	FILE *fp = NULL;

	fp = fopen("./data.txt", "r");
	if(NULL == fp)
	{
		perror("fopen");
		return -1;
	}


    struct student s[5];
	struct  student temp;
	int i=0;
    int ret;
	while(1)
	{
		ret = fscanf(fp, "%d%s", &temp.num, temp.name);
		if(EOF == ret) //到达文件结尾
		{
			break;
		}

	    s[i] = temp;
		i ++;
	}


	fclose(fp);


    for(int j=0; j<i; j++)
	{
		printf("%d\t%s\n", s[j].num, s[j].name);
	}
	return 0;
}

fgets的用法

#include <stdio.h>



int main()
{
	FILE *fp = NULL;
	fp = fopen("./test.conf", "r");
	if(NULL == fp)
	{
		perror("fopen");
		return -1;
	}



	char buff[1024];
	while(NULL != fgets(buff, 1024, fp))
	{
		printf("buff: %s\n", buff);
	}

	fclose(fp);

	return 0;
}

小练习:
制作一个可以存储影片信息的影片管理系统,每个功能使用一个独立函数封装起来。

主函数

在这里插入图片描述
在这里插入图片描述

结构体

在这里插入图片描述

添加函数

在这里插入图片描述

删除函数

在这里插入图片描述

修改函数

在这里插入图片描述

显示函数

在这里插入图片描述

数据保存函数

在这里插入图片描述

写入数据函数

在这里插入图片描述
在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 18:45:50  更:2022-08-19 18:50:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 8:58:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码