学习笔记_setfill和setw

1、setw()接受整数参数,设置输出域宽.

2、setfill()接受字符参数,用于指定当输出域宽大于实际输出域宽时所需的填充字符.

Time.h
#ifndef TIME_H
#define TIME_H

//Time class definition
class Time
{
public:
    Time();
    void setTime(int, int, int);  //set hour, minute and second
    void printtUniversal();       //print time in universal-time format
    void printStandard();         //print time in standard-time format
private:
    int hour;
    int minute;
    int second;
};

Time.cpp
#include <iostream>
#include <iomanip>
#include "Time.h"
using namespace std;

Time::Time()
{
    hour = minute = second = 0;
}

void Time::setTime(int h, int m, int s)
{
    hour = (h >= 0 && h <= 24) ? h : 0;
    minute = (minute >= 0 && minute <= 60) ? minute : 0;
    second = (second >= 0 && second <= 60) ? second : 0;
}

void Time::printtUniversal()
{
    cout << setfill('0') << setw(2) << hour << ":" << setw(2) << minute << ":" << setw(2) << second;
}

void Time::printStandard()
{
    cout << ((hour == 12 || hour == 0) ? 12 : hour % 12) << ":" << setfill('0') << setw(2) << minute << ":" << setw(2) << second << (hour < 12 ? " AM" : " PM");
}

Main.cpp
#include <iostream>
#include"Time.h">
using namespace std;

int main()
{
    Time t;
    cout << "The initial universal time is ";
    t.printtUniversal();
    cout << "\nThe initial standard time is ";
    t.printStandard();

    t.setTime(13, 27, 6);

    cout << "\n\nUniversal time after setTime is ";
    t.printtUniversal();
    cout << "\nStandard time after setTime is ";
    t.printStandard();

    t.setTime(99, 99, 99);

    cout << "\n\nAfter attemping invalid settings:" << "\nUniversal time: ";
    t.printtUniversal();
    cout << "\nStandard time: ";
    t.printStandard();
    cout << endl;
    system("pause");
}
结果
The initial universal time is 00:00:00
The initial standard time is 12:00:00
Universal time after setTime is 13:27:06
Standard time after setTime is 1:27:06 PM
After attempting invalid settings:
Universal time: 00:00:00
Standard time: 12:00:00 AM

通过结果可以看出,在printUniversal和printStandard中,使用setfill设置填充字符为‘0’,因此当minute为2时,将会显示02。若实际输出填满了setw指定的域宽,那么就不会显示填充字符。

note:一旦setfill指定了填充字符,该字符将应用在后续值的显示中。也就是说,setfill是一个“黏性”设置,但setw是一个“非粘性”设置,其只对紧接着显示的值起作用。对于粘性设置,当不需要时应恢复,否则可能会出现格式错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值