cin和cout
包含头文件iostream,使用命名空间std(避免每个都得加作用域),iomanip是C++里用来格式化控制输入输出的,多个不同类型的变量的输入输出可以按照以下的方法来完成。
程序运行中,需要保证输入数据的正确性,有可能出现不报错但是输入出现问题的情况:
不能用逗号进行分割(C语言scanf也是在逗号分割的时候输入才用逗号),还是可以用空格,TAB或者换行来实现多个变量输入的分割。endl是std命名空间中定义的,功能与'\n'相同,都是换行。当然,在C++里也可以用转义字符'\n'来代替endl。
cin对异常输入会设置失败位,但是不会使程序报错或者中断,可以通过cin.fail()来完成检测输入是否正常:
或者直接把cin写入循环控制条件(异常输入会返回NULL也就是0 逻辑假)
如果即要保证输入正常,又需要遇到a赋值为0就退出程序,可以这样:
cout可以输出:变量、常量(字符串常量)、表达式、函数调用等等,也可以像C语言printf函数一样进行各种输出格式的设定。
格式化输出
包含iomanip头文件,可以在<<中设置格式,也可以通过cout调用相应的函数来实现同样的功能。
1、设置输出进制(十六进制、八进制等)用cout<<setbase(16)或者dec、hex、oct等标识符
注意点:setbase或者使用hex等标识符后,cout将切换成对应的输出格式,也就是说后面的输出都会按这种输出格式,直到下一次设置新的输出格式;没有其他的3、5、12进制,当然cout也没有报错,而是按默认的十进制输出。
2、设置宽度可以通过cout.width(***) 或者 cout<<setw(***)来完成,和printf一样默认补空格,可以分左补和右补 cout.setf(ios::left / right) 或者 cout << setiosflags(ios::left / right) 要注意的是left是输出靠左(右补)right则是左补空格,同样不够则按原样输出(不补不截断) ,并且可以通过cout.fill('*') 或者 cout << setfill('*') 来实现补其他字符
3、控制浮点数输出精度 :
默认浮点数输出六位数字(不包括小数点,不够的按照数字长度输出不补0),超过6位的情况下先判断整数部分是否超过6位,如果超过,则按照科学计数法输出,否则对小数部分四舍五入,保证 整数部分 + 小数部分的位数 等于 6
123.456789 输出 123.457 (四舍五入,整数3位+小数3位)
123456.789 输出 123457 (四舍五入,整数6位+小数0位)
12345678.9 输出1.23457e+007 (科学计数法 1.23457 * 10^7 尾数四舍五入)
浮点数的输出格式有:
cout.setf(ios::scientific) 或者 cout<<setiosflags(ios::scientific) 设置成科学计数法输出
cout.setprecision(*) 或者 cout<<setprecision(*) 设置输出精度(一般与fixed一起使用)
cout.setf(ios::fixed) 或者 cout<<setiosflags(ios::fixed) 设置小数点位数固定(默认6)
结合2里的 setw fill等来控制浮点数的格式化输出
另外:科学计数法不能使用精度格式,否则出错;setiosflags还有其他的显示格式控制方式:ios::skipws 忽略前导空格 ios::upercase 大写 ios::showpos 正数显示+ ios::showpoint 强制显示小数点 等等