在c ++中的int中实现前面的0

时间:2015-12-10 00:20:09

标签: c++ int cout

我正在尝试在用户输入日期后显示日期。

因此,如果用户输入2010/10/2作为日期,则应更改为2010/10/02,将前一个0添加到int

以下是我的相关代码:

请注意,我尝试了setw和setfill,但没有一个工作。

        file.ignore(1);
        file >> year;
        file.ignore(1);
        file >> mon;
        file.ignore(1);
        file >>  std::right>> setw(2) >> setfill('0')  >> day;

3 个答案:

答案 0 :(得分:0)

您还需要setprecision,但是在打印结果时需要使用它,而不是在您阅读时使用它。

// read the data in:
file >> ignore(1) >> year >> ignore(1) >> mon >> ignore(1) >> day;

// write out the result:
std::cout << std::setfill('0') << std::setprecision(4) << setw(4) << year << "/";
std::cout << std::setprecision(2) << setw(2) << mon << "/";
std::cout << std::setprecision(2) << setw(2) << day << "/";

答案 1 :(得分:0)

函数std::get_timestd::put_time处理可选的前导0,如果您有reference方便,可以轻松指定格式:

std::tm t{};
std::cin >> std::get_time(&t, "%Y/%m/%d"); // %Y, %m, %d take optional leading 0s
if (std::cin.fail()) {
    // failed to parse date
} else {
    std::cout << std::put_time(&t, "%Y/%m/%d") << '\n'; // %d puts the 0 padding
}

这是一个live example,代码只是略微改变了链接引用。

答案 2 :(得分:-1)

每当你读取一个int,或者用C ++中的int做任何事情时,它都会删除所有前面的'0',因为它们不是必需的。如果要保留那些0,请将输入作为字符串读取。请注意,这就是电话号码之类的东西在数据库中存储为字符串的原因。这意味着转换中没有任何东西丢失