C++程序7 :IO流与异常处理
Posted 编程足迹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++程序7 :IO流与异常处理相关的知识,希望对你有一定的参考价值。
C++ IO流与异常处理
导读
一、IO流基本操作
#include <iostream>
#include <iomanip> //输出流控制字符
#include <string>
using namespace std;
struct MM
{
string name;
int age;
int num;
};
/*
流:流是由若干字节组成的字节序列
代表信息从源到目的的流动
流中内容:可以是二进制;ASCII码;或其他形式
用类实现所有流操作---》流类体系结构
*/
int main()
{
cout << "ILoveyou" << endl;
int num;
cin >> num;
//输出流对象:
//1.成员函数的使用方式
//字符和字符串
cout.put('A');
char cNum = 'C';
cout.put(cNum);
cout << endl;
char name[] = "女生";
cout.write(name,5);
//2.其他两个输出流对象 cerr;clog -->cout
int size = 0;
if (size == 0)
cerr << "栈不能为空" << endl; //表示错误输出
clog << "一样的效果" << endl; //表示错误输出
//输入流
//1.字符输入
fflush(stdin);
cNum = cin.get();//输入一个字符
cout << cNum << endl;
fflush(stdin);
cin.getline(name, 5); //输入一个字符串
cout << name << endl;
//流控制字符 等于C语言中的格式空字符
//1.包含头文件 iomanip
bool bNum = false;
//boolalpha //流控制字符
cout << boolalpha << bNum << endl;
struct MM array[3] = { "name1", 18, 1001, "name2", 28, 1002, "name3", 48, 1003 };
//设置宽度
//默认右对齐
cout << setiosflags(ios::left)<<setw(10) << "name"
<< setw(4) << "age"
<< setw(5) << "num" << endl;
for (int i = 0; i < 3; i++)
{
cout << setiosflags(ios::left) << setw(10) << array[i].name
<< setw(4) << array[i].age
<< setw(5) << array[i].num << endl;
}
//设置精度 :指有效位数,并不是小数位
cout << setprecision(3) << 343123.23 << endl;
cout << hex << 32 * 18 << endl;
cout.width(10); //设置宽度
cout.setf(ios::right);
cout << name << endl;
system("pause");
return 0;
}
二、字符流
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
//1.处理字符串
cout << info << endl;
//stringstream 构建对象
//stringstream 类名
//object: 对象名 标识符而已
stringstream object(info);//用info初始化字符流
//str();函数得到我们字符流对象中的字符串
cout << object.str() << endl;//通过字符流对象获取字符流中内容
cout << "通过空格拆分每一部分:" << endl;
//把字符流当做是一次用户的数据输入,从字符流流向变量
string tempData;
cout << "字符流对象充当输入的功能" << endl;
object >> tempData; //等价于cin
//cin>>tempData; 键盘-->输入流对象--->tempData;
//int num;
//cin >> num;//用户输入键盘 数据流到cin对象中,cin对象流到num中
//12 234 34 34
cout << tempData << endl;
int a[4];
for (int i = 0; i < 4; i++)
{
object >> a[i];
cout << a[i] << " ";
}
cout << endl;
string score("12345");
stringstream strToInt(score);
int result = 0;
strToInt >> result;
cout << result << endl;
system("pause");
return 0;
}
三、文件流操作
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
/*
fstream: 类 可读可写
ifstream :read 只读
ofstream :write 只写
1.打开文件
1.1 定义一个文件对象
fstream file;
1.2 打开文件
file.open(char *fileURL,int mode);
mode: //读写方式
ios::in 读
ios::out 写
ios::app 追加
注意点:组合方式:
ios::in|ios::out 位或
2.读写文件
2.1 流运算符来操作 >> <<
2.2 成员函数
write(char *dst,size_t size);
写多少个字节
read(char *dst,size_t size);
3.关闭文件
file.close();
4.操作文件指针
//fseek
seekg(size_t length,int position)
ios::beg
ios::cur
ios::end
*/
struct MM
{
string name;
int age;
int num;
};
int main()
{
//流的方式操作文件
fstream file1;
file1.open("流运算符读写.txt", ios::out | ios::in | ios::trunc);
int num = 1001;
file1 << "ILoveyou" <<' '<<num<< endl;
file1.seekg(0, ios::beg); //移动到开始位置
char str[10];
int result = 0;
file1 >> str>>result;
cout << str<<":"<<result << endl;
file1.close();
//通过成员函数去读写
struct MM array[3] = { "name1", 18, 1001, "name2", 28, 1002, "name3", 48, 1003 };
fstream fMM;
fMM.open("MM.txt", ios::out | ios::in | ios::trunc);
fMM.write((char *)&array[0], sizeof(struct MM) * 3);
fMM.seekg(0, ios::beg);
MM readInfo[3];
fMM.read((char *)&readInfo[0], sizeof(struct MM) * 3);
for (int i = 0; i < 3; i++)
{
cout << setiosflags(ios::left) <<
setw(6) << readInfo[i].name <<
setw(4) << readInfo[i].age <<
setw(5) << readInfo[i].num << endl;
}
fMM.close();
system("pause");
return 0;
}
四、异常处理
#include <iostream>
#include <string>
using namespace std;
/*
异常:什么是异常?万物即可是异常 包含错误
抛出异常:throw 可以抛出任何东西
捕获异常:try
处理异常:catch 根据捕获的异常的类型去处理
注意:抛出的异常没有被处理,会调用默认的abort函数终止程序
*/
void print(int a, int b)
{
//以前做法:当前有问题当前解决
if (b == 0)
return;
printf("%d", a / b);
}
void printError(int a, int b)
{
if (b == 0)
throw b;
printf("%d", a / b);
}
void printError(int a)
{
throw string("任何东西都是异常");
}
int main()
{
print(1, 0);
//{}必须存在
try
{
printError(2, 0);
printf("ILoveyou!");
}
catch (int)//
{
cout << "除数不能为0!" << endl;
}
catch (double)
{
cout << "double" << endl;
}
try
{
printError(12);
}
catch (string object) //string object=抛出的内容
{
cout << object << endl;
}
try
{
printError(2, 0);
}
catch (...)
{
printf("任何东西都是异常! ");
}
system("pause");
return 0;
}
五、自定义类型的异常
#include <iostream>
#include <string>
using namespace std;
class stackEmpty
{
public:
stackEmpty(string str = "栈为NULL") :str(str){}
void print()
{
cout << str << endl;
}
protected:
string str;
};
void pop(int size)
{
if (size == 0)
throw stackEmpty("栈为NULL,无法操作!");
}
//不存在的异常的函数
int Max(int a, int b) throw()
{
return a > b ? a : b;
}
int main()
{
try
{
pop(0);
}
catch (stackEmpty object)
{
object.print();
}
system("pause");
return 0;
}
六、C++库中异常
#include<exception>
#include<string>
#include<iostream>
using namespace std;
/*
exception: 异常的基类
what方法用来打印相关异常的信息
//异常的派生类
bad_alloc new的异常
out_of_range 溢出
runtime_error 运行时问题
range_error
length_error
*/
int main()
{
try
{
int **pMomery = new int*[100000000];
for (int i = 0; i < 1000; i++)
{
pMomery[i] = new int[100000000];
}
}
catch (bad_alloc object)
{
cout << object.what() << endl;
}
int array[5] = { 1, 2, 3, 4, 5 };
int *p = &array[4];
//p[0]
//cout<<p[0]<<endl;
cout << p[-3] << endl;
system("pause");
return 0;
}
我知道你在看哟
新浪微博:@秀米XIUMI
以上是关于C++程序7 :IO流与异常处理的主要内容,如果未能解决你的问题,请参考以下文章