setw не работает, как ожидалось

Я пытаюсь напечатать время в формате чч: мм, но когда время равно 01:01, оно печатается как 1: 1. Вот мой код:

void output(int hour, int min, char ampm){
cout << setw(2) << setfill('0') << "The time is: " << hour << ":" << min << " ";

if(ampm == 'P'){
cout << "PM";
}
else if (ampm == 'A'){
cout << "AM";
}
}

Насколько я понимаю, это должен Работа. Я включаю iomanip. Вы видите что-то не так с этим?

3

Решение

Ширина — это особая настройка форматирования: в то время как все остальные флаги форматирования являются фиксированными, width() будет сброшен каждым оператором вывода (ну, у вас могут быть определенные пользователем операторы вывода, которые не сбрасывают width() но при этом не следовал бы нормальному стилю). То есть вам нужно установить ширину непосредственно перед выводом, который должен быть затронут:

std::cout << std::setfill('0')
<< std::setw(2) << hour << ':'
<< std::setw(2) << min << ' ';
5

Другие решения

Следующий правильный путь:

 cout<<""The time is: ";
cout << setfill('0') <<setw(2) << hour << ":" <<setw(2) << min << " ";

Ссылка: —этот

2

По вопросам рекламы [email protected]