cin.width()和cout.width()问题

前言

最近在跟着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个,不足前面补上两个空格。

以下以此类推,所以才会出现如此的输出结构。

 

  • 24
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值