cout 标准输出类
不同进制输出数字
cout 数字数字默认是以十进制表示,也可以是用其他的进制表示:例如:
八进制:std::cot
std::cout << std::oct << i << std::endl;
十进制:std::dec
std::cout << std::dec << i << std::endl;
十六进制:std::hex
std::cout << std::hex << i << std::endl;
注意:设置了上面三种进制控制符表示后,后面的默认都沿用该设置,例如:
int i = 10;
int a = 11;
int b = 12;
std::cout << std::hex << i << a << std::endl;
std::cout << b << std::endl;
那么后面的将都已十六进制输出
以二进制比特位输出:
在头文件 bitset 中名字空间 std 中有个 bitset 类可以将数字以二进制表示
#include <bitset>
例如:
double i = 2.6;
std::cout << std::bitset<4>(i) << std::endl;
其中<>中的 4 表示只显示低 4 位,i 就是要转换的数字
在使用 cout 对内容格式进行控制的操作一般在 std 里面的一些类可以对其进行处理,具体的一个介绍将关注后续容器一章的讲解,下图讲述了一些输出格式控制的控制类,可以根据所需操作对应去查找相关 std 容器的用法。
cin 标准输入类
cin 也是 std 空间中的一个类,它重载了>>运算符用于做一个输入操作
例如:
int a;
float b;
double c;
char d;
char buf[128];
std::cin>>a;
std::cin>>b;
std::cin>>c;
std::cin>>d;
std::cin>>buf;
需要注意的是,使用 cin 输入的时候,输入的类型一定要正确,否则会出现意想不到的错误,
例如:
#include <iostream>
int main()
{
int a = 10;
std::cin>>a;
std::cout<<a<<std::endl;
return 0;
}
当输入非数字的,a 的值就变成 0 去了
如果是在循环中,将使程序陷入死循环,例如
#include <string>
#include <iostream>
using namespace std;
int main( )
{
int num;
while(1)
{
cout << "请输数字: ";
cin >> num; //当输入字母或者.时会导致 cin 状态异常陷入死循环
cout << "你输入的数字是: " << num << endl;
}
return 0;
}
另外在对字符串进行输入的时候,遇到空格,TAB 和回车符就默认字符串结束了
cin.get 方式输入
方式一:
char a ;a = std :: cin . get ();
在键盘上获取一个字符给到返回值
方式二:
char a ;std :: cin . get ( a );
从键盘中获取一个字符给到第一个参数
方式三:
char a [ 128 ] = { 0 };std :: cin . get ( a , 128 );
从键盘中读取一个字符串给到第一个参数,第二个参数是字符串最大长度,相比于利用>>去读字符串, 它可以接收空格和 TAB.
方式四:
char a [ 128 ] = { 0 };std :: cin . get ( a , 128 , '0' );
与方式三不同的是,它可以指定遇到什么字符结束,例如指定为‘0’就是遇到字符 0 就结束。
cin.getline 方式输入
cin 类中函数:
std 空间中函数:
istream & getline ( istream & is , string & str ); // 默认以换行符结束istream & getline ( istream & is , string & str , char delim );
方式一:使用 cin 类中函数
char a[128] = {0};
std::cin.getline(a,128);
std::cin.getline(a,128,'p'); //指定结束符
与 get 不同的是,
cin.getline
不会将结束符或者换行符残留在输入缓冲区中
方式二:使用
std 空间中函数
#include <iostream>
#include<string>
int main()
{
std::string a;
std::getline(std::cin,a);
std::cout<<a<<std::endl;
return 0;
}
这个是建议使用的一个字符串输入函数,它是 string 头文件中 std 名字空间中的一个函数,可
以对 string 进行输入,而上面的 get 输入方式只能对 char*类型进行输入
cin 清空缓冲区
std::cin.ignore();
用于清空缓冲区的内容
还可以使用 cin.ignore()来限定清除的缓冲区字符。例如:
#include <iostream>
#include<string>
int main()
{
char a[128] = {0};
std::cin>>a;
std::cin.ignore(1024,'p');
char b = std::cin.get();
std::cout<<a<<":"<<b<<std::endl;
return 0;
}
可以看到 ignore 把缓冲区字符 p 之前的都清除了,也包括 p,其中 ignore 的第一个参数是一个最大清除流大小的一个字段,只要将它设置的足够大,就只有第二个参数有效了。