написал код для практики, но никак не могу сделать так, чтобы таблица выводилась ровно. Значения под комментарием в самом конце кода. Кто может, помогите, пожалуйста. Может стоило использовать метод getline, ибо в cin ограниченные буферы. #include<stdio.h> #include<clocale> #include <iostream> #include <iomanip> using namespace std; int main() { setlocale(LC_ALL, "rus"); system("chcp 1251 > nul"); char name1[10]{}, name2[10]{}, name3[10]{}; char sc1{}, sc2{}, sc3{}; long long cnt1{}, cnt2{}, cnt3{}; float sq1{}, sq2{}, sq3{}; cout << "1.Введите: фирму, количество, объём, часть >"; cin >> name1 >> sc1 >> cnt1 >> sq1; cout << "2.Введите: фирму, количество, объём, часть >"; cin >> name2 >> sc2 >> cnt2 >> sq2; cout << "3.Введите: фирму, количество, объём, часть >"; cin >> name3 >> sc3 >> cnt3 >> sq3; cout << setw(31) << "|------------------------------------------------------------------------|\n"; cout << setw(31) << "| Фирмы - производители СКБД |\n"; cout << setw(31) << "|------------------------------------------------------------------------|\n"; cout << setw(10) << "| Фирма " << setw(5) << "| Количесво. Продуктов " << setw(5) << "| Годовой объём продажи " << setw(5) << "| Часть рынка |\n"; cout << setw(31) << "|-----------|------------------------|------------------------|--------------|\n"; cout << setw(10) << "| " << setw(11) << name1 << setw(3) << "| " << setw(15) << sc1 << setw(3) << "| " << setw(16) << cnt1 << setw(3) << "| " << setw(12) << sq1 << setw(3) << "|\n"; cout << setw(31) << "|-----------|------------------------|------------------------|--------------|\n"; cout << setw(10) << "| " << setw(11) << name2 << setw(3) << "| " << setw(15) << sc2 << setw(3) << "| " << setw(16) << cnt2 << setw(3) << "| " << setw(12) << sq2 << setw(3) << "|\n"; cout << setw(31) << "|-----------|------------------------|------------------------|--------------|\n"; cout << setw(10) << "| " << setw(11) << name3 << setw(3) << "| " << setw(15) << sc3 << setw(3) << "| " << setw(16) << cnt3 << setw(3) << "| " << setw(12) << sq3 << setw(3) << "|\n"; cout << setw(31) << "|-----------|------------------------|------------------------|--------------|\n"; cout << setw(31) << "| Примечание: по данным Gartner Group за 1999г |\n"; cout << setw(31) << "--------------------------------------------------------------------------\n"; return 0; } /* Oracle 1 2488000000 31.1 IBM 3 2391500000 29.9 Microsoft 2 1048000000 13.1 */ Code #include<stdio.h> #include<clocale> #include <iostream> #include <iomanip> using namespace std; int main() { setlocale(LC_ALL, "rus"); system("chcp 1251 > nul"); char name1[10]{}, name2[10]{}, name3[10]{}; char sc1{}, sc2{}, sc3{}; long long cnt1{}, cnt2{}, cnt3{}; float sq1{}, sq2{}, sq3{}; cout << "1.Введите: фирму, количество, объём, часть >"; cin >> name1 >> sc1 >> cnt1 >> sq1; cout << "2.Введите: фирму, количество, объём, часть >"; cin >> name2 >> sc2 >> cnt2 >> sq2; cout << "3.Введите: фирму, количество, объём, часть >"; cin >> name3 >> sc3 >> cnt3 >> sq3; cout << setw(31) << "|------------------------------------------------------------------------|\n"; cout << setw(31) << "| Фирмы - производители СКБД |\n"; cout << setw(31) << "|------------------------------------------------------------------------|\n"; cout << setw(10) << "| Фирма " << setw(5) << "| Количесво. Продуктов " << setw(5) << "| Годовой объём продажи " << setw(5) << "| Часть рынка |\n"; cout << setw(31) << "|-----------|------------------------|------------------------|--------------|\n"; cout << setw(10) << "| " << setw(11) << name1 << setw(3) << "| " << setw(15) << sc1 << setw(3) << "| " << setw(16) << cnt1 << setw(3) << "| " << setw(12) << sq1 << setw(3) << "|\n"; cout << setw(31) << "|-----------|------------------------|------------------------|--------------|\n"; cout << setw(10) << "| " << setw(11) << name2 << setw(3) << "| " << setw(15) << sc2 << setw(3) << "| " << setw(16) << cnt2 << setw(3) << "| " << setw(12) << sq2 << setw(3) << "|\n"; cout << setw(31) << "|-----------|------------------------|------------------------|--------------|\n"; cout << setw(10) << "| " << setw(11) << name3 << setw(3) << "| " << setw(15) << sc3 << setw(3) << "| " << setw(16) << cnt3 << setw(3) << "| " << setw(12) << sq3 << setw(3) << "|\n"; cout << setw(31) << "|-----------|------------------------|------------------------|--------------|\n"; cout << setw(31) << "| Примечание: по данным Gartner Group за 1999г |\n"; cout << setw(31) << "--------------------------------------------------------------------------\n"; return 0; } /* Oracle 1 2488000000 31.1 IBM 3 2391500000 29.9 Microsoft 2 1048000000 13.1 */
Lend_inactive296716, Проблема в том, что если поля размет полей имеет разную длину. Например "Фирма" - 5 символов, а "Годовой объём продажи" 21 с учётом пробелов. Метод setw(); у тебя по сути статичный. Ты отрисовываешь таблицу, будто заранее знаешь ещё длину полей. Попробуй передавать в метод setw(); значения зависящие от длины строки. К примеру у тебя всегда отступ 15 символов. строка БУДЕТ иметь 10. Значит передать нужно setw(15 - std::size(name1));
Kail_inactive6607873, Вы сами не понимаете, что пишете, если все везде путать, то не выйдет ничего хорошего, тем более вы это пишете в качестве ответа, т.е. выступаете в качестве образца для спрашивающего.