C++学习笔记

小甲鱼学习课程

02

#include <iostream>

头文件 iostream io+stream 翻译为IO流 输入输出流

using namespace std; 引入命名空间

c++标准库所使用的所有标识符都是在同一个特殊的名字空间std中来定义的;

偷懒使用这句话;

std::cout <<"第一个int元素结果是:" << data[0]<<endl;

std::cout 可以直接使用 cout 代替

endl 结束输出流,没有这个就会一直流出;

cout输出流例子

cpp 复制代码
#include <iostream>
using namespace std;
int main()
{
    int data[] = {99,1,2,3,4,5};
    int size = sizeof(data) / sizeof(data[0]);
    std::cout <<"第一个int元素结果是:" << data[0]<<endl;
}

03

cin输入流

配合>> 就是已经重载,重载类似于替代原有含义,替代了右移,变成了提取信息;

提取输入流的时候,提取正确的类型返回true,否则falsh;

如int i;

cin>>i,提取到3.14小数点,就返回falsh,因为i是int类型;但是可以提取到3;

可以提取字符串、int、float、double类型

cin.peek();检查当前流的字符

cin.get();读取流的下一个字符

cpp 复制代码
#include <iostream>
using namespace std;
int main()
{
	int i,sum=0;
	while (cin>>i)
	{
		sum += i;
		while (cin.peek() == ' ')//如果为空格,一直获取空格
		{
			cin.get();
		}
		if (cin.peek() == '\n')
		{
			break;
		}
	}
    std::cout << sum;
}

cin.ignore(n);//忽略 n个字符

cin.ignore(n,' x');//忽略 n个字符,n个字符以内遇到x就结束忽略
cin.getline(buf, n);//保存n个字符到buf

cpp 复制代码
int main()
{
	char buf[20];

	cin.ignore(7);//忽略 7个字符
	cin.getline(buf, 10);//保存10个字符
	std::cout << buf<<endl;
}

cin.read(buf,10);//读取10个字符到buf

cin.gcount() //返回输入流的字符计数值

cpp 复制代码
int main()
{
	char buf[20];

	cin.read(buf,10);//读取10个字符到buf
	std::cout << cin.gcount() << endl;//输出输入流的字符计数
}

04

在工程下面新建一个123.txt文本

文件输出流

ofstream out;//流出到文件

out.open("123.txt"); 这个流指定文本,加载到程序内存

out.close(); 关闭 这个流指定文本

cpp 复制代码
#include <iostream>
#include<fstream>//文件数据流
using namespace std;
int main()
{
    ofstream out;//输出文件数据流
    out.open("123.txt");//输出流;打开文件,文件流指向这个文件
    if (!out)
    {
        cerr << "打开文件失败" << endl;
        return 0;
    }
    for(int i=0;i<10;i++)
    {
        out << i;//文件输出流,流入指定位置
    }
    
    out << endl;//停止流
    out.close();//关闭文件输出流
    std::cout << "Hello World!\n";
}

ifstream in; 输入文件流对象;用来流入到文件

in.open("123.txt");//输入文件流,这个流指定文本,从这个文件流入,加载到程序内存

if ( !in ) 如果打开文件失败返回false

cpp 复制代码
#include <iostream>
#include<fstream>
using namespace std;
int main()
{
    ifstream in;//输入文件流
    in.open("123.txt");//输入文件流,指定文本,从这个文件流入
    if (!in)
    {
        cout << "打开文件失败" << endl;
        return 0;
    }
    char i;
    while (in>>i)//文件流入给字符i
    {
        cout << i;//
    }
    in.close();//关闭这个流的文本
    std::cout << "Hello World!\n";
}

ifstream in("123.txt"); 也可以构建对象的时候直接打开文件,指定流文件
ofstream out("123.txt");

fstream in("123.txt",int open_mode);//二参数打开

//open_mode 可以如下

ios::in;//打开一个可读文件

ios::out;//打开一个可写文件

ios::binary;//以二进制的形式打开一个文件

ios::app;//写入的所有数据将被追加到文件的末尾

ios::trunc;//删除文件原来已经存在的内容

ios::_Nocreate;//如果要打开的文件不存在,那么以此参数调用open函数将无法进行

ios::_Noreplace;//如果要打开的文件已存在,试图用open打开时返回错误

在c++库中如下:所以可以多种模式用 并运算符使用

cpp 复制代码
    static constexpr _Openmode in         = static_cast<_Openmode>(0x01);
    static constexpr _Openmode out        = static_cast<_Openmode>(0x02);
    static constexpr _Openmode ate        = static_cast<_Openmode>(0x04);
    static constexpr _Openmode app        = static_cast<_Openmode>(0x08);
    static constexpr _Openmode trunc      = static_cast<_Openmode>(0x10);
    static constexpr _Openmode _Nocreate  = static_cast<_Openmode>(0x40);
    static constexpr _Openmode _Noreplace = static_cast<_Openmode>(0x80);
    static constexpr _Openmode binary     = static_cast<_Openmode>(0x20);

fstream fp("123.txt",ios::in|ios::out);文件流对象,输入输出流模式,指定文件

fp.seekg( ) 文件定位

cpp 复制代码
#include <iostream>
#include<fstream>
using namespace std;

/*
seekg是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址。
ios::end是代表流的结尾,0代表偏移量。f.seekg(0, ios::end);意思是直接跳到当前流的结尾,略过流内的所有数据*/
int main()
{
	fstream fp("123.txt",ios::in|ios::out);//
	if (!fp)
	{
		cerr << "打开文件失败" << endl;
	}
	fp << "145a4da4dsd1435";//流出到文件
	static char str[30];
	fp.seekg(ios::beg); //ios::end; 流文件结尾
	fp >> str;//流入到数组
	cout << str << endl;
	fp.close();

	return 0;
}

05输入输出总结

1

cpp 复制代码
#include <iostream>

int main()
{
    char answer;
    std::cout << "请问可以格式化您的硬盘吗?【Y/N】" << "\n";
    std::cin >> answer;//缓冲区里面:一个是输入字符,和回车

    switch (answer)
    {
    case 'y':
    case 'Y':
        std::cout << "格式化了\n";
        break;
    case 'n':
    case 'N':
        std::cout << "不会格式化\n";
        break;
    default:
        std::cout << "输入错误\n";
        break;
    }
    std::cin.ignore(10,'\n');//忽略10个字符,直到10个字符内存在回车 ;为了忽略那个输入回车
    std::cin.get();//等待输入结束
    std::cout << "Hello World!\n";
}

//输入检测函数

std::cin.eof();//输入到文件的末尾返回true

std::cin.fail();//如果cin无法工作,返回true

std::cin.bad();//如果cin因为比较严重的原因而无法工作,返回true

补充:

cin.clear()//清除标示符

重置错误标识符‌:当输入操作失败时,例如输入了一个非法的字符,cin会设置错误标识符。此时,可以使用cin.clear()来重置这些标识符,使其回到无错误状态

相关推荐
星幻元宇VR28 分钟前
VR机动车模拟驾驶系统助力交通安全科普
科技·学习·安全·生活·vr
进击的荆棘1 小时前
C++起始之路——哈希表的实现
数据结构·c++·散列表·哈希
U盘失踪了1 小时前
Playwright with sync_playwright() as p 上下文管理器
笔记
t***5448 小时前
如何配置Orwell Dev-C++使用Clang
开发语言·c++
大龄程序员狗哥8 小时前
第25篇:Q-Learning算法解析——强化学习中的经典“价值”学习(原理解析)
人工智能·学习·算法
CoderCodingNo8 小时前
【信奥业余科普】C++ 的奇妙之旅 | 13:为什么 0.1+0.2≠0.3?——解密“爆int”溢出与浮点数精度的底层原理
开发语言·c++
南境十里·墨染春水8 小时前
linux学习进展 线程同步——互斥锁
java·linux·学习
balance_rui9 小时前
FreeRTOS
笔记·stm32
nashane9 小时前
HarmonyOS 6学习:旋转动画优化与长截图性能调优——打造丝滑交互体验的深度实践
学习·交互·harmonyos·harmonyos 5
华清远见IT开放实验室9 小时前
智能手表完整项目实现,比赛求职双向加分,基于嵌入式大赛推荐开发板(STM32U5)
stm32·单片机·嵌入式硬件·学习·智能手表·嵌入式大赛