Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.12.2024
Сообщений: 4

Почему setw() с числами работает как и должен, а с текстовыми данными нет

15.12.2024, 16:07. Показов 2005. Ответов 13

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <iomanip>
#include <sstream>
 
using namespace std;
 
struct MARSCH {
    string tourName;
    double pricePerDay = 0.0; //цена за день
    int days = 0; //дней
    double travelCost = 0.0; //цена проезда
    double exchangeRate = 0.0; //курс валюты
    int currencyAmount = 0; //количество валюты
};
 
struct TUR {
    MARSCH tour; //наименование тура
    string lastName; //фамилия
    string firstName; //имя
    string middleName; //отчество
    double totalCost = 0.0; //стоимость поездки
};
 
 
// Функция для отображения данных в виде таблицы
void displayRecords(TUR* x, int n) {
    cout << "----------------------------------------------------------------------------------------------------------------------------------------------------------" << endl;
    cout << "| " << setw(3) << "N"
        << " | " << setw(12) << "Цена за день"
        << " | " << setw(4) << "Дней"
        << " | " << setw(17) << "Стоимость проезда"
        << " | " << setw(11) << "Курс валюты"
        << " | " << setw(17) << "Количество валюты"
        << " | " << setw(17) << "Стоимость поездки"
        << " | " << setw(17) << "Наименование тура"
        << " | " << setw(30) << "Фамилия Имя Отчество клиента"
        << " |" << endl;
    cout << "----------------------------------------------------------------------------------------------------------------------------------------------------------" << endl;
 
    for (int i = 0; i < n; i++) {
        cout << "| " << setw(3) << right << i + 1
            << " | " << setw(12) << right << fixed << setprecision(2) << x[i].tour.pricePerDay
            << " | " << setw(4) << right << x[i].tour.days
            << " | " << setw(17) << right << fixed << setprecision(2) << x[i].tour.travelCost
            << " | " << setw(11) << right << fixed << setprecision(2) << x[i].tour.exchangeRate
            << " | " << setw(17) << right << x[i].tour.currencyAmount
            << " | " << setw(17) << right << fixed << setprecision(2) << x[i].totalCost
            << " | " << setw(30) << x[i].tour.tourName
            << " | " << left << setw(30) << x[i].lastName
            << left << setw(30) << x[i].firstName
            << left << setw(30) << x[i].middleName
            << " |" << endl;
    }
 
    cout << "-----------------------------------------------------------------------------------------------------------------------------------" << endl;
}
 
 
//Функция для загрузки данных из файла
void inputFromFile(TUR*& x, int& n) {
   
int main() {
    TUR* a = nullptr;
    int n = 0;
    int choice;
 
    while (true) {
        clearScreen();
        cout << "\nМеню:\n";
        cout << "1. Загрузить данные из файла\n";
        cout << "2. Вывести все записи\n";
        cout << "12. Выход\n";
        cout << "\nВыберите пункт меню: ";
        cin >> choice;
 
        switch (choice) {
        case 1: inputFromFile(a, n); break;
        case 2: displayRecords(a, n); break;
             cout << "Выход из программы...\n";
            return 0;
        default:
            cout << "Некорректный выбор! Попробуйте снова.\n";
            break;
        }
        cin.ignore();  // Очистка символа новой строки после ввода
        cout << "\nНажмите Enter для продолжения...";
        cin.get();
    }
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.12.2024, 16:07
Ответы с готовыми решениями:

Как заполнить выделенный на рабочем листе диапазон случайным образом числами, текстовыми данными, формулами, датами
Напишите макрос, который заполнял бы выделенный на рабочем листе диапазон случайным образом числами, текстовыми данными, формулами, датами....

Объект luxon не работает с переменными, но с числами проблем нет. Почему?
Добрый день! Столкнулся с таким казусом. Пишу код с luxon. чтобы передать проблему написал упрощённый вариант функции function...

Как работает Setw() в данной программе?
Доброго времени суток! Знаю как работает setw(), но какой-то странный результат выходит у меня в этой программе :/ Мне нужно что...

13
 Аватар для Наталья8
518 / 368 / 65
Регистрация: 09.03.2016
Сообщений: 3,865
15.12.2024, 16:34
Форматированный вывод.
Ели printf вам кажеться на си похож, добавьте STD два двоеточия.
C++
1
 std::printf();
Ровный вывод таблицы
0
0 / 0 / 0
Регистрация: 08.12.2024
Сообщений: 4
15.12.2024, 16:54  [ТС]
к сожалению только при помощи setw разрешается
0
Нарушитель
10225 / 5655 / 1257
Регистрация: 12.03.2015
Сообщений: 26,176
15.12.2024, 17:04
Цитата Сообщение от meojisa Посмотреть сообщение
к сожалению только при помощи setw разрешается
Кому и кем разрешается?
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6087 / 2778 / 1037
Регистрация: 01.06.2021
Сообщений: 10,137
15.12.2024, 18:02
Цитата Сообщение от meojisa Посмотреть сообщение
только при помощи setw разрешается
имхо, делать таблицу в консоли не очень хорошо. Три или четыре колонки еще можно реализовать, но остальное от лукавого. Представь, что будет с таблицей, если ширина консоли будет недостаточной? Нормальную таблицу нужно делать только с горизонтальной прокруткой.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
15.12.2024, 20:34
Цитата Сообщение от meojisa Посмотреть сообщение
Почему setw() с числами работает как и должен, а с текстовыми данными нет
О чем речь вообще?
0
0 / 0 / 0
Регистрация: 08.12.2024
Сообщений: 4
15.12.2024, 20:54  [ТС]
когда я вывожу таблицу, она у меня выглядит следующим образом (все числовые значения выравнены по правому краю, а строки плавают):

Code
1
2
3
4
5
6
7
8
9
----------------------------------------------------------------------------------------------------------------------------------------------------------
|   N | Цена за день | Дней | Стоимость проезда | Курс валюты | Количество валюты | Стоимость поездки | Наименование тура | Фамилия Имя Отчество клиента |
----------------------------------------------------------------------------------------------------------------------------------------------------------
|   1 |      4800.00 |   20 |          50500.00 |       10.00 |               200 |          50500.00 | Турция | Иванова Анна     Александровна |
|   2 |      5000.00 |   14 |          54000.00 |       23.00 |               400 |          54000.00 | Бали   | Колеганова Вилена Викторовна |
|   3 |      2500.00 |   15 |          20000.00 |       10.00 |               200 |          20000.00 | Альпы | Борисов Виктор Петрович |
|   4 |      6000.00 |   30 |          62000.00 |       22.00 |               300 |          62000.00 | Турция | Петрова Елена   Алексеевна |
|   5 |      7500.00 |   18 |          80000.00 |       24.00 |               500 |          80000.00 | Турция | Сидорова Мария   Владимировна |
|   6 |      6000.00 |   20 |          42000.00 |       25.00 |               100 |          42000.00 | Швейцария | Николаев Дмитрий Анатольевич |
Добавлено через 8 минут
уверен не в этом дело, пробовал убрать все числовые значения, не помогло
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
15.12.2024, 21:14
Лучший ответ Сообщение было отмечено meojisa как решение

Решение

Цитата Сообщение от meojisa Посмотреть сообщение
а строки плавают
setw может работать "неправильно" с кириллицей.

Ради эксперимента, на время перепишите все строковые данные латиницей. Сразу станет ясно, в этом ли дело.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6087 / 2778 / 1037
Регистрация: 01.06.2021
Сообщений: 10,137
15.12.2024, 21:16
meojisa, ширина столбца должна принимать значение длины элемента с макс. длиной в данном столбце.
0
0 / 0 / 0
Регистрация: 08.12.2024
Сообщений: 4
15.12.2024, 21:20  [ТС]
Помогло. Спасибо огромнейшее!!!!
0
Модератор
Эксперт С++
 Аватар для zss
13765 / 10960 / 6489
Регистрация: 18.12.2011
Сообщений: 29,233
15.12.2024, 21:33
Цитата Сообщение от Royal_X Посмотреть сообщение
если ширина консоли будет недостаточной
Придется задать в настройках нужную ширину

И все размеры станут правильными.

p.s.

Цитата Сообщение от meojisa Посмотреть сообщение
<< " | " << setw(30) << x[i].tour.tourName
<< " | " << left << setw(30) << x[i].lastName
<< left << setw(30) << x[i].firstName
<< left << setw(30) << x[i].middleName
чтобы соответствовать шапке, придётся задать
C++
1
2
3
4
 << " | " << setw(17) << x[i].tour.tourName
 << " | " << left << setw(10) << x[i].lastName<<' ' 
              << setw(9) << x[i].firstName  << ' '
              << setw(9) << x[i].middleName
Т.е. под ФИО получится 10+1+9+1+9=30 символов
и учтите, что если тексты не влезут в заданные размеры,
то они расширятся, чтобы их вместить!
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6087 / 2778 / 1037
Регистрация: 01.06.2021
Сообщений: 10,137
15.12.2024, 21:36
Цитата Сообщение от zss Посмотреть сообщение
Придется задать в настройках нужную ширину
а що тянуть окно не вариант? я не пробовал и мне лень пробовать

представь, что будет, если длина элемента больше, чем название столбца, в котором расположен данный элемент...
0
Модератор
Эксперт С++
 Аватар для zss
13765 / 10960 / 6489
Регистрация: 18.12.2011
Сообщений: 29,233
15.12.2024, 21:41
Цитата Сообщение от Royal_X Посмотреть сообщение
а що тянуть окно не вариант?
Не получится.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6087 / 2778 / 1037
Регистрация: 01.06.2021
Сообщений: 10,137
15.12.2024, 21:42
Цитата Сообщение от zss Посмотреть сообщение
Не получится.
тогда тем более, ради говно-программы я не собираюсь менять настройки консоли
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.12.2024, 21:42
Помогаю со студенческими работами здесь

Не понимаю как работает width/setw/setfill;
Есть класс List, объект которого я вывожу проходясь циклом по элементам списка. И хочется запихнуть эти элементы в таблицу по выводе, но...

There are no arguments to 'setw' that depend on a template parameter, so a declaration of 'setw' must be available
void throw_if_less_zero(int value) { if (value &lt; 0) throw new out_of_range(&quot;value должно быть неотрицательным&quot;); } ...

Почему не работает паттерн с глобальными данными?
Необходимо передать значение с формы &quot;Input&quot; на форму &quot;Work&quot; для этого используется паттерн Singleton, но он не работает Файл...

Почему не работает условный оператор который по идее должен работать
Здравствуйте есть такой код . Суть в том что человек вводит команду Казино программа проверяет правильно ли введена команда через if и...

Почему не работает код? (По идее должен считать количество цифр в числе)
echo &quot;Please enter a number: &quot;; $num = (int)trim(fgets(STDIN)); $counter=0; while ($num &gt; 0) { $num/=10; echo &quot;$num...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru