Как вы выставляете выходные данные разных длин из массива?

Вопрос:

Я делаю программу для питья, и я хочу, чтобы все цены выстроились вместе.

Есть ли способ сказать компилятору написать цену X количество пробелов от начала строки вместо добавления пробелов после публикации названия напитка?

int main()
{
const int arrsize = 5;
Drinks arr[arrsize] = {
{"Cola",.75,20},
{"Root Beer",.75,20},
{"Lemon-Lime",.75,20},
{"Grape Soda",.80,20},
{"Cream Soda",.80,20},
};

for (;;){
cout << "Please select a drink: "<<endl;
for (int i = 0; i < arrsize; i++){
cout << (i+1)<<". "<< arr[i].DrinkName;
cout << setw(10) << setfill(' ')<< right <<fixed << arr[i].DrinkCost<<endl;
}
cout <<"6. Quit";

break;
}

return 0;
}

Я хочу, чтобы он выглядел так:

Please select a drink:
1. Cola            0.75
2. Root Beer       0.75
3. Lemon-Lime      0.75
4. Grape Soda      0.80
5. Cream Soda      0.80
6. Quit

Но это выглядит так:

Please select a drink:
1. Cola        0.75
2. Root Beer     0.75
3. Lemon-Lime      0.75
4. Grape Soda      0.80
5. Cream Soda      0.80
6. Quit

Лучший ответ:

Если вы посмотрите ближе на свой вывод, вы увидите, что цифры соответствуют десяти символам из текста, что именно вы запросили.

Вместо этого вы должны форматировать текст:

cout << (i+1)<<". " << std::setw(15) << std::left << arr[i].DrinkName
     << std::fixed << arr[i].DrinkCost << std::endl;

О, и небольшой совет: не используйте типы с плавающей запятой для денежных значений.

Ответ №1

Один из способов сделать это — выровнять строковые литералы, т.е. Добавить пробелы для заполнения.

Drinks arr[arrsize] = {
{"Cola      ",.75,20},
{"Root Beer ",.75,20},
{"Lemon-Lime",.75,20},
{"Grape Soda",.80,20},
{"Cream Soda",.80,20},
};

Ответ №2

См. Множество подробных ответов в формате std :: string, например sprintf.

C++ может легко использовать вызовы функций C, но для некоторых вам нужно немного позаботиться. C printf() или sprintf() — это два способа получить желаемый формат.

Ответ №3

Попробуйте следующее:

for (;;){
cout << "Please select a drink: "<<endl;
for (int i = 0; i < arrsize; i++){
cout << (i+1) << ". ";
cout << left << setw(12) << setfill(' ') << arr[i].DrinkName;
cout << setw(5) << fixed << arr[i].DrinkCost << endl;
}

Оцените статью
TechArks.Ru
Добавить комментарий