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;

}


C++程序7 :IO流与异常处理

我知道你在看

新浪微博:@秀米XIUMI

以上是关于C++程序7 :IO流与异常处理的主要内容,如果未能解决你的问题,请参考以下文章

C++(四十六) — 异常处理机制标准IO输入输出

java io流与文件操作

字符流与字节流

C++ 高级教程:C++ 异常处理

C++异常处理的编程方法(阿愚,整整29集)

C++ 异常处理