cout

cout 用于在屏幕上显示消息,应该是 console output 的简写。它是 C++ 中 ostream 对象,该类被封装在 库中,该库定义的名称都放在命名空间 std 中,所以 cout 的全称是 std::cout 。

cout 被分类为流对象,这意味着可以使用数据流的。要在屏幕上显示消息,可以发送一串字符到 cout 。例如:cout << "hello world!" ;

如果要使用 cout ,需要包含库 。

cout 输出的格式控制

在使用 cout 时,可以将一些格式控制操作符放在语句中,来实现不同的输出效果。

以不同进制输出数字

cout 在输出数字时,默认是十进制的方式,还可以使用 hex 、oct 、dec 来控制输出的进制,这三个控制符都包含在 库中。例如:using namespace std;

auto i = 65534;

cout.setf(ios::uppercase); //输出为大写字母

cout << hex << i << endl; //十六进制输出(默认为小写字母)

cout << oct << i << endl; //八进制输出

cout << dec << i << endl; //十进制输出

cout << setbase(16) << i << endl; //以16进制输出

其中的 setiosflags(ios::uppercase) 表示以大写字母输出(默认是 ios::lowercase), setbase(n) 方法表示以 n 进制输出,其中的 n 取值为 8、10 或者 16,其余值无输出。这两个函数都包含在库 中。

使用 setiosflags() 时,可以使用 | 来同时设置多个位,例如:cout << setiosflags(ios::scientific | ios::showpos) << 12.01 << endl;

控制浮点数的输出

可以通过 setprecision(n) 、setiosflags(ios::fixed) 或 fixed 来对 cout 输出的精度进行控制。这几个控制符都包含在库 库的 std 命名空间中。#include

#include

#include

int main(void)

{

using namespace std;

system("chcp 65001");

system("cls");

double p = 1233.141592653;

cout << p << endl;

cout << setprecision(3) << p << endl; //保留两位小数

cout << setprecision(15) << p << endl;

cout << setiosflags(ios::fixed);

cout << p << endl;

cout << fixed << p << endl;

return 0;

}

运行结果如下:1233.14

1.23e+03

1233.141592653

1233.141592653000089

1233.141592653000089

显示小数点和正负号

此外,还可以使用 setiosflags(ios::showpoint) 来显示小数点,使用 setiosflags(ios::showpos) 来显示正负号。例如:double i2 = 100;

double d2 = -3.14;

cout << setprecision(4);

cout << setiosflags(ios::showpoint); //显示小数点

cout << i2 << endl;

cout << setiosflags(ios::showpos); //显示正负号

cout << d2 << "\t" << i2 << endl;

输出结果如下:100.0000

-3.1400 +100.0000

默认显示6个有效位数。

设置宽度和对齐方式

可以通过 setw(n) 函数来设置输出的宽度,当不足宽度的时候,以空格填充剩余的空间,如果超出宽度,则忽略设置的宽度;使用 setiosflags(ios::left|ios::right) 来设置对齐方式。这些都定义在 库中的 std 命名空间中。例如:cout.fill(' ');

cout << setw(10) << 100 << setw(10) << 100 << endl;

cout << setiosflags(ios::left) << setw(10) << 100 << setw(10) << 100 << endl;

cout << setiosflags(ios::right) << setw(10) << 100 << setw(10) << 100 << endl;

输出结果为:100 100

100 100

100 100

输出的结果默认为右对齐。

设置填充字符

在宽度大于字符数量时,cout 默认使用空格填充剩余的空间,可以使用 setfill('*') 来设置为其他的填充字符。例如:cout << setfill('*') << setiosflags(ios::right) << setw(10) << 100 << setw(10) << 100 << endl;

使用 cout 的成员函数

ostream 类还有一些成员函数,通过 cout 来调用它们也可以控制格式输出。和前面的控制符不同的是,使用成员函数会影响后面所有使用默认格式的输出。如下表:成员函数控制符说明precision(n)setprecision(n)设置输出浮点数的精度为n

width(w)setw(w)指定输出宽度为w个字符

fill(c)setfill(c)在指定输出宽度的情况下,多余的空白使用字符c填充

setf(flag)setiosflags(flag)将摸个输出格式标志设置为1

unset(flag)resetiosflags(flag)将某个输出格式标志设置为0cout.precision(5);

double x = 1123.23456;

cout << x << endl;

cout.width(20);

cout.fill('*');

cout << x << endl;

cin

cin 是 C++中的标准输入流对象,它是 istream 类的对象,包含在 库中, std 命名空间中。cin 主要用于从标准输入读取数据,这里的标准输入,指的是键盘。

当我们从键盘输入字符串的时候,需要按一下回车键才能够将这个字符串送入到缓冲区中。那么键入的回车键也会被转换为一个换行符,这个换行符也会被存储在 cin 的缓冲区并且被当做一个字符来计算。

cin 读取数据也是从缓冲区中读取数据,当缓冲区为空时,cin 的成员函数会阻塞等待数据的到来,一旦有数据,就触发函数去读取数据。所以,当缓冲区有残留数据时,cin 的函数会直接取得这些数据而不会请求键盘输入。

cin 常用的读取方法

当使用 cin 从标准输入读取数据时,通常用到的方法有 cin >> 、cin.get() 、cin.getline() 。

cin >>

cin >> 可以连续的从键盘读取数据,以空格、Tab 键或者换行符作为分隔符或者结束符。

当从缓冲区读取数据时,如果第一个字符是空白字符,cin>> 会忽略并将其清除,继续读取下一个字符,如果缓冲区为空,则继续等待。如果读取成功,字符后面的分隔符都是残留在缓冲区内的,cin >> 不做处理。int a, b, c;

cin >> a >> b >> c;

cout << a << b << c << endl;

上面的代码,将会要求我们输入三个数,并以空白分隔,输出才算完成。

cin>> 等价于 cin.operator>>(),即调用成员函数 operator>>() 进行读取数据。

如果不想略过开头的空白字符,那就使用 noskipws 流控制符。如下:cin >> noskipws >> a;

cin.get()

这个函数有多个版本的重载。如下:int cin.get();

istream& cin.get(char& var);

istream& get(char* s, streamsize n);

istream& get(char* s, streamsize n, char delim);

其中的 streamsize 被定义为 long long 类型。

int cin.get() 和 istream& cin.get(char& var)

这两种版本都是一次读取一个字符。

例如下面的代码:char c1, c2;

c1 = cin.get();

cin.get(c2);

cout << c1 << '\t' << (int)c2 << endl;

运行,输入 a,然后回车,输出如下:a

a

如上面的代码:cin.get() 从缓冲区读取单个字符时不忽略空白,直接将其读取,所以变量 c2 保存的是一个空行 \r。它的返回值是 int 类型,成功则返回读取字符的 ASCII 码值,遇到文件结束符时,返回 EOF,即 -1 。在 Windows 中,可以使用 Ctrl+Z 来输入文件结束符。

cin.get(char var) 如果成功返回的是 cin 对象,所以可以支持链式操作,比如 cin.get(a).get(c) 。

可以使用 cin.get() 来删除缓冲区上一次遗留下来的换行符。

使用 cin.get() 读取一行

cin.get() 的后面两种重载形式,istream& get(char* s, streamsize n);

istream& get(char* s, streamsize n, char delim);

可以用来读取一行。这两个版本的区别是,前者默认以换行符结束,后者可以指定结束符。参数里的 n 表示目标空间的大小。

例如下面的代码:#include

int main(void)

{

using namespace std;

system("chcp 65001");

system("cls");

char arr1[100] = {NULL};

cin.get(arr1, 100);

char a;

cin.get(a);

cout << arr1 << " " << (int)a << endl;

system("pause");

return 0;

}

运行的结果:hello world //输入

hello world 10

从上面的代码中,可以看出:读取一行时,遇到换行符时停止读取,但是对换行符不做处理,换行符依然残留在输入缓冲区。

第二次使用 cin.get(a) 将换行符读入变量 a ,输出的 ASCII 码值为 10 。就是上一次残留的换行符。

这种方法读取一行时,只能将字符串读入 C 风格的字符串中,即 char* ,使用 C++ 的 getline() 函数可以将字符串读入 string 类型。

cin.getline 读取一行

这个函数可以从键盘读取一个字符串,还可以以指定的结束符结束。它不会将换行符残留在缓冲区。函数有两个重载的版本,如下:istream& getline(char* s, streamsize count); //默认的换行符结束

istream& getline(char* s, streamsize count, char delim); //delim 指定结束符

例如下面的代码:#include

int main(void)

{

using namespace std;

char arr1[100] {0};

cin.getline(arr1, 100);

cout << arr1 << endl;

system("pause");

return 0;

}

cin 的条件状态

使用 cin 读取键盘输入时,一旦出错,cin 将设置条件状态(condition state)。条件状态定义如下:goodbit :无错误

eofbit :已经到达文件尾

failbit :非致命的输入/输出错误,可挽回

badbit :致命的输入/输出错误,无法挽回

这些条件状态都有对应的成员函数,可以用来设置、读取当前的条件状态。这些成员函数如下:函数说明cin.eof()如果流 cin 的 eofbit 为1,则返回 true

cin.fail()如果流 cin 的 failbit 位为1,则返回 true

cin.bad()如果流 cin 的 badbit 位为1,则返回 true

cin.good()如果流 cin 的 goodbit 位为1,则返回 true

cin.clear(flags)清空状态标志位,将给定的标志位 flags 设置为0,无返回值,如果不带参数,那么则是将清除所有的非good状态

cin.setstate(flags)将对应的 flags 设置为1,无返回值

cin.rdstate()返回当前状态。返回值类型为 iostate

cin.ignore()它有两个参数,第一个是整型,第二个是 char 类型。它表示从输入流 cin 中提取第一个参数指定的字符数量,然后将这些字符忽略,如果提取的数量达到指定值或者字符等于第二个参数指定的字符时,该函数将终止。否则,继续等待,直到两个条件之一满足。第二个参数默认值为 EOF

例如下面的代码:#include

int main(void)

{

using namespace std;

system("chcp 65001");

system("cls");

int a;

while(true)

{

cin >> a;

cout << "位状态:good=" << cin.good() << ", eof=" << cin.eof() << ", bad=" << cin.bad() << ", fail=" << cin.fail() << endl;

//文件尾,可以使用Ctrl+Z

if(cin.eof())

{

cout << "文件尾命令" << endl;

exit(1);

}

if(cin.fail())

{

cout << "输入的非数字。" << endl;

cin.clear();

cin.ignore(1000,'\n'); //忽略后面的所有内容

continue;

}

}

system("pause");

return 0;

}

运行结果:1

位状态:good=1, eof=0, bad=0, fail=0

a

位状态:good=0, eof=0, bad=0, fail=1

输入的非数字。

^Z

位状态:good=0, eof=1, bad=0, fail=1

文件尾命令

我们可以看到,在输入正确的类型(int)后,good 位标志为1。输入非数字时,fail 位被设置。当使用 clear() 函数进行清除状态后,除 good 位外所有的位都被设置为0。

其他用于读取的函数

这些函数不是 cin 的成员函数,但也可以用于读取输入。

gets() 函数

gets() 函数可以一直读取,直到遇到换行符或者文件尾,它的读取不设上限,所以必须保证缓冲区足够大。它不会让换行符残留在缓冲区。它是 C 语言的库函数。使用如下:#include

int main(void)

{

using namespace std;

char arr1[100] {0};

gets(arr1);

cout << arr1 << endl;

system("pause");

return 0;

}

getchar() 函数

getchar() 读取一个字符并返回,可以读取空白,遇到换行符停止。也会处理结尾的换行符。#include

int main(void)

{

using namespace std;

char c;

c = getchar();

cout << c << endl;

system("pause");

return 0;

}

getline() 函数

getline() 函数读取一整行,它是在 std 命名空间中的全局函数,这个函数的参数使用了 string 类型,所以声明在了 头文件中。

getline() 从标准输入设备中读取一行,当遇到下面三种情况之一会结束读取:文件结束 EOF。

遇到行分隔符。

输入达到最大的限度。

这个函数有两个重载的版本:istream& getline(istream& is, string& str); //默认以换行符 \n 分隔行

istream& getline(istream& is, string& str, char delim); //指定分隔符

例如下面的代码:#include

int main(void)

{

using namespace std;

while(true)

{

string str;

getline(cin, str);

cout << str << endl;

}

system("pause");

return 0;

}

getline() 函数遇到结束符时,会将结束符一并读入指定的 string 中,再将结束符替换为空字符。

c语言cin cout,C++学习之:cout和cin用法总结相关推荐

  1. c 语言的输出函数cout,详解C++ cout格式化输出完全攻略

    写算法题的时候突然发现自己忘记基本的C++:cout格式化输出了,赶紧拉出以前的C++学习笔记重新看一看. 部分内容来自教程:C语言中文网(一个很棒的网站) 有时希望按照一定的格式进行输出,如按十六进 ...

  2. 大一上学期C语言不熟知识点学习总结

    大一上学期C语言不熟知识点学习总结通过前几章对顺序结构程序设计程序.if选择结构.switch语句.循环结构.数组.函数的学习,这一次我将主要针对几种不熟悉的知识点及题型进行分析. 一. 增1和减1运 ...

  3. c语言getline函数什么意思,详解C++ cin.getline函数

    cin 虽然可以使用 cin 和 >> 运算符来输入字符串,但它可能会导致一些需要注意的问题. 当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格.制表符或换行符).一旦它接 ...

  4. 如何零基础学习python语言_零基础如何入门Python语言?有哪些学习建议?

    众所周知,Python目前是最受欢迎的编程语言之一,尤其是对于零基础的初学者来说,Python语言更是十分的友好.因此,不少初学者常常会有这样一个共同的疑惑,零基础如何入门Python语言?本文就来给 ...

  5. 零基础学python语言_零基础如何入门Python语言?有哪些学习建议?

    众所周知,Python目前是最受欢迎的编程语言之一,尤其是对于零基础的初学者来说,Python语言更是十分的友好.因此,不少初学者常常会有这样一个共同的疑惑,零基础如何入门Python语言?本文就来给 ...

  6. python是用什么语言开发的-python是什么语言?哪些人适合学习Python?

    众所周知,Python 是一门更注重可读性和效率的语言,这两个天然优势让其在IT界里备受青睐,吸引了不少目光.相信找到这篇文章的你,肯定也是为Python的魅力所倾倒. 那么Python是什么语言呢? ...

  7. c语言教程的辅导书,清华大学出版社-图书详情-《C语言程序设计案例教程学习辅导》...

    01C语言是国内广泛使用的计算机语言,是很多高等学校计算机及相关专业的核心课程,以及其他理工科专业的计算机通识基础课程.于延.周国辉主编的<C语言程序设计案例教程>(清华大学出版社出版)采 ...

  8. R语言神经网络与深度学习(一)

    #R语言神经网络与深度学习(一) #画出ReLU函数 x=seq(-1,1,0.1)   #生成x变量,赋值-1~1等差数列 relu=function(x) ifelse(x>0,x,0)   ...

  9. java控制硬件_厨师都开始用Python和Java了,现在C语言还值得我们学习吗?

    C语言是否值得我们学习? ? ? ? ? ? 最近几年,大数据.人工智能.机器学习越来越受人关注,甚至达到妇孺皆知的程度.但是精通这方面的人才供不应求,再加上薪资水平相当高,会有很多人想要学习Pyth ...

最新文章

  1. python 基础语法练习回顾
  2. Eclipse 安装插件(aptana、svn 、git、Java EE、JSHint)
  3. Memcache工作原理总结
  4. mysql实现俩个属性加减运算_SQL实现相邻两行数据的加减乘除操作
  5. 前端进阶系列(六):盒模型
  6. 作者:刘大伟(1984-),男,博士,烟台中科网络技术研究所助理研究员。
  7. 企业级系统应用,高级组合查询示例讲解 - Jeecg实战
  8. AFNetworking速成教程
  9. mysql中timestamp自动更新
  10. 将网页内容保存为PDF
  11. 成功制定:会议纪要模板
  12. MPCS-314 1A 光电耦合器 用于IGBT/MOSFET隔离栅极驱动 完美代替ELS3150 亿光
  13. 2022年1024程序员节日纪念
  14. php7安装fileinfo扩展
  15. 剪辑画中画视频,如何用视频实现画中画效果
  16. SQLServer uniqueidentifier 类型
  17. 清华姚班教授: 「读博,你真的想好了吗?」与 UIUC 王鸿伟「读博,我想好了!」...
  18. 应聘恩智浦时考察正则表达式
  19. Pulmonary--Detection5
  20. 《坤之色——楚雄》孙溟㠭书画艺术

热门文章

  1. 腾讯PCG AI招聘OCR算法实习生
  2. 青铜修炼手册:Axure页面右键菜单制作
  3. [推荐]ubuntu下的精品软件[elain整理]
  4. Centos6.5编译安装zabbix2.2通过snmp协议监控路由器
  5. 图片如何清除杂物?这几款软件或许可以帮助你
  6. 生产管理ERP解决方案
  7. rabbitmq fanout java_spring boot整合RabbitMQ(Fanout模式)
  8. windows下用vs2019编译fltk 1.3.5
  9. Tableau 可视化十大案例,原来数据还能长得这么好看
  10. canvas实现水母