版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38371360/article/details/85682898
前言
最近在跟着FishC大佬学C++,碰到了一个很有趣的输入输出问题,多方查资料,有了点心得,记录一下。
cin与cout的功能虽然不同,但它们有许多类似点,如都可以指定域宽。cin的输入域宽可以使用操作符setw指定,也可使用cin.width函数成员指定。cin在读入一个字符串时,不能根据字符数组的长度自动读入字符,如果用户输入过多的字符,超过了字符数组的长度,cin会将多余字符存储到该数组的后面,这就有可能覆盖其他变量。如果我们为其指定了输入域宽,就可解决这一问题。
如果所需的宽度比设置的域宽小,空位用填充字符填充。如果显示数据所需的宽度比设置的域宽大,系统输出所有位。域宽设置仅对下一行流读入或流插入操作有效,在一次操作完后被置0。
正文
#include <iostream>
using namespace std;
int main()
{
int width = 4;
char str[20];
cout << "请输入一段文本: \n";
cin.width(5); //cin>>str;实际只能提取4个字符,str最后一个是空字符,其他的放在流中等待接受。
while( cin >> str )
{
cout.width(width++); //将4个字符输出,设置每次输出的域宽增加1
cout << str << endl; //输出str
cin.width(5); //设置接受4个字符
}
return 0;
}
如果输入文本:May You Always Remember How Precious You Are!
结果如下所示:
cin.width()的域宽一直为5,由于存在最后一个字符是空字符的情况,所以实际上每次只读取4个字符,其他的字符放在流中等待下次接受。
第一行输出 May, 此时,cin.width = 5,cout.width = 4,遇到空格自动停止接收,位数不足4位,前补一个空格。
第二行输出 You,此时,cin.width = 5,cout.width = 5,遇到空格自动停止接收,所以所以读入3个字符,输出5个,不足前面补上两个空格。
以下以此类推,所以才会出现如此的输出结构。
扫描二维码关注公众号,回复:
4851769 查看本文章