使用流进行输入输出
常用的流控制符
使用std::cout将指定格式的数据写入控制台
// 使用流进行输入输出.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
// 指定数据输出格式
double var1 = 3.1415926;
cout << fixed << var1 << endl; // 将默认输出方式设置为定点方式显示
cout << scientific << var1 << endl; // 将默认输出方式设置为以科学计数法的方式标准
int var2 = 36;
cout << hex << var2 << endl; //将默认输出方式设置为以十六进制的方式显示,但是不同于iomanip中的hex显示,这里仅仅可以正常显示整型变量
cout << hex << (float)var2 << endl;
// ios_base::showbase:显示底数,例如0x(16进制)
// ios_base::uppercase:字母大写显示
// ios_base::hex:16进制显示
cout << setiosflags(ios_base::hex | ios_base::showbase | ios_base::uppercase); // 设置输出模式
cout << var2 << endl;
cout << resetiosflags(ios_base::hex | ios_base::showbase | ios_base::uppercase); // 将这些输出的规定取消
cout << var2 << endl;
cout << setprecision(5) << var1 << endl; // 将默认输出方式设置为设置精度为5(小数部分为5位)
}
使用std::cout对齐文本和设置字段宽度
// 使用流进行输入输出.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
// 指定数据输出格式
double var1 = 3.1415926;
cout << fixed << var1 << endl; // 将默认输出方式设置为定点方式显示
cout << scientific << var1 << endl; // 将默认输出方式设置为以科学计数法的方式标准
int var2 = 36;
cout << hex << var2 << endl; //将默认输出方式设置为以十六进制的方式显示,但是不同于iomanip中的hex显示,这里仅仅可以正常显示整型变量
cout << hex << (float)var2 << endl;
// ios_base::showbase:显示底数,例如0x(16进制)
// ios_base::uppercase:字母大写显示
// ios_base::hex:16进制显示
cout << setiosflags(ios_base::hex | ios_base::showbase | ios_base::uppercase); // 设置输出模式
cout << var2 << endl;
cout << resetiosflags(ios_base::hex | ios_base::showbase | ios_base::uppercase); // 将这些输出的规定取消
cout << var2 << endl;
cout << setprecision(5) << var1 << endl; // 将默认输出方式设置为设置精度为5(小数部分为5位)
// 设置数据的输出排列方式
cout << setw(10) << setfill('*');
cout << var2 << endl; // 默认右对齐
cout << setw(10) << setfill('*');
cout << setiosflags(ios_base::left); // 设置左对齐
cout << var2 << endl;
cout << setw(10) << setfill('*');
cout << setiosflags(ios_base::right); // 设置右对齐
cout << var2 << endl;
}
Getline的使用方法
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
// 数据的读取
char name[8] = { 0 };
cin >> name;
cout << name << endl;
string mark;
getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束
if (mark == "\0")
{
cout << "缓存区读取失败" << endl;
}
cout << mark << endl;
}
Cin.getine()与getline()的区别
定义的区别
Getline(istream对象,string类型的InputVar,读取结束的字符) |
Cin.getline(数组类型的InputVar,读取的字符个数(包含’\0’)) |
操作的区别
Getline()非常好用,但是所有读取的元素必须在一行之内,也就是说,你读取的缓存区不允许有换行符’\n’;cin.getline()就不太好用了,假设我要读取8个字符放入name字符数组中,cin.getline()会在第8个字符位置插入’\0’,因此我们仅仅可以读取前7个字符将其赋值给name字符数组,最终name字符数组中只有7个有效元素。
安全性的区别
虽然cin.getline()有些不好用,但是我觉得它很安全,因为在第七个元素后面插入了’\0’读取结束标志,因此你们无论输入多少个元素,cin.getline()只会读取前7个元素,不会造成内存问题。
所属位置的区别
Geline() | string类中成员函数 |
Cin.getline() | istream类中的成员函数 |
Cin.getine()用法
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
// 数据的读取
char name[8] = { 0 };
cin.getline(name, 8); // 读取前7个字符与最后一个结束字符'\0'构成8个字符但是只将前7个字符赋给name,'\0'留在缓存区内
cout << name << endl;
cin.clear(); // 清空开头到'\0'的输入缓存区
string mark;
getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束
if (mark == "\0")
{
cout << "缓存区读取失败" << endl;
}
cout << mark << endl;
getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束
if (mark == "\0")
{
cout << "缓存区读取失败" << endl;
}
cout << mark << endl;
}
注意:一定要加上“cin.clear(); // 清空开头到'\0'的输入缓存区”,只有这样才可以清除缓存区开头的’\0’读取结束符。
Getline()的优点
Getline()在读取结束完成后,不会向缓冲区内植入任何符号,而且可以连续读取缓存区内的内容。
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
string mark;
getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束
if (mark == "\0")
{
cout << "缓存区读取失败" << endl;
}
cout << mark << endl;
getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束
if (mark == "\0")
{
cout << "缓存区读取失败" << endl;
}
cout << mark << endl;
}
Cin.get()函数的用法
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
char weight[10] = { 0 };
cin.get(weight, 8); // 在缓冲区内读取7个字符与'\0'一起插入weight中
cout << weight << endl;
cin.get(weight, 8); // 在缓冲区内读取7个字符与'\0'一起插入weight中
cout << weight << endl;
}
我们可以将cin.get()与cin.getline()作比较,都是读取的n-1个数据,只不过’\0’这个元素插入位置不同,cin.get()是将’\0’插入变量中而cin.getline()是将’\0’元素插入缓冲区内,因此两者不同。
Cin.get()与cin.getline()用法的区别
读取格式不同
cin.getline( )确保您捕获用户输入的整行,包括空白在内;cin.get( )则不可以包含空白。
读取方式不同
Cin.getline(数组类型的InputVar,读取的字符个数(包含’\0’)) |
cin.get(istream对象,读取字符个数 ) |