c++ day14 异常处理。i/o操作

异常

异常程序代码错误的时候产生的一种错误, 在其他语言中,如python, 在程序运行时如果有错误的话就会抛出异常,控制台上会爆出红色的错误信息,而c++没有, 只是将退出状态码设置为不是0,代表程序不是正常退出,这就使我们追踪bug有一定的影响

异常捕获

当我们觉得程序可能在哪个代码块上会出现异常的时候可以用try来对异常进行捕获, 防止该错误影响到程序的执行,


    try{
    // 异常捕获
        autoresult = do_something();
    }catch(exception err){
        //处理该异常
    }catch(...){
    // 异常处理
    }

exception是所有异常的父类,可以使用该类来接收异常, 也可以使用 ..., … 可以接收所有异常,

抛出异常

throw可以使用这个关键字给程序抛出异常,跳转程序运行,提醒开发人员,如

    int a = 10;
    int b = 0;
    if (b == 0){
        throw string("被除数不能为0");
    }
    int c = a / b;

noexcept

用在函数上,说明这个函数不会抛出异常,如果出现异常了,编译器也运行通过编译

输出

输出布尔数据

在c/c++中,在对bool类型的数据做输出的时候,打印的是 0 、1 ,如果希望看到的是 true 和 false ,那么可以使用 boolalpha 操作符。

	bool flag = false;
    cout << "flag的值是:" << flag  <<" 添加操作符后:"<<boolalpha << flag << endl;

十进制八进制十六进制` 输出 ,默认输出十进制, 使用 dec oct hex 关键字可以将十进制数字转为八进制或十六进制

	 cout <<"十进制:" << dec  <<9 << endl; 9 
    cout <<"八进制:" << oct  <<9 << endl; 011
    cout <<"十六进制:" << hex <<10 << endl;  //0xa

setprecision输 出浮点数,选择输出小数位,

	double a = 1.23645785578852589;
  cout  << setprecision(5)<<" a ="<<a << endl;  // 1.2364

setprecision 可以控制输出的小数位, 如果使用默认的输出的话,最多只会输出6位数字

文件操作

文件操作有三种常用类, 读,写, 读写,

ofstream 表示输出文件流,用于创建文件并向文件写入信息。
ifstream 表示输入文件流,用于从文件读取信息。
fstream 可读可写

文件操作模式:
ios::app 追加模式。所有写入都追加到文件末尾
ios::ate 文件打开后定位到文件末尾。
ios::in 打开文件用于读取。
ios::out 打开文件用于写入。
ios::trunc 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。

  fstream file{"../test.txt" , ios::in};
  // 打开当前目录先的test.txt 以只读的方式

is_open()在打开文件后可以通过该方法判断是否成功打开了该文件, 如果成功,则为true,反之

获取文件内容, getline()
getline 可以获取文件的一行内容, 在该函数中可以接收两个参数,第一个是打开文件的对象, 第二个是要赋值的变量, 如:

string content;
  fstream file{"../test.txt" , ios::in};
	getline(file, content)

它会获取一行内容赋值给 content 变量, 如何获取全部内容呢,可以使用while 循环来循环获取

string content;
  fstream file{"../test.txt" , ios::in};
	while(getline(file, content)){
	cout << content << endl;
	}

这样,这样循环获取内容会将数据替换掉, 到最后content 变量 只留下最后一行的数据

getline 也可以接受三个参数,

string test;
		getline(f , line)
      stringstream ss;
        ss.clear();
        ss << line;
        while (getline(ss, test, '#')){
        cout << test << endl;
	}

\这种情况是接收 字符流, 在c++中没有 split 可以直接操作字符串, 在c++中使用字符流才能对字符串进行切割,
将 line 中的字符内容 重载到 stringstream 变量 ss 中, 然后就可以使用getline 对该条内容通过 ‘#’ 来进行切割了,

写入

需要在打开文件对象中指定该文件对象的操作, ios::app 就是往文件中写内容

    fstream file{"../test2.txt",ios::app};

    if(file.is_open()){
        cout << "正常打开文件"<<endl;

        //写入数据
        file << ",hi c++";

        //写入换行
        file << endl;
        //写入结束
        file.close();
    }

通过 << 运算符可以将后面的数据添加到文件中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值