我正在尝试在用户输入日期后显示日期。
因此,如果用户输入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;
答案 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_time
和std::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,请将输入作为字符串读取。请注意,这就是电话号码之类的东西在数据库中存储为字符串的原因。这意味着转换中没有任何东西丢失