


Как выровнять первую строчку при выводе в файле?
У меня есть программа на C++
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
struct HouseholdAppliance {
string name;
string brand;
int power;
float price;
int quantity;
};
int main() {
HouseholdAppliance appliances[14] = {
// (Ваши данные по бытовой технике здесь)
{"Холодильник", "Samsung", 300, 800, 10},
{"Пылесос", "Dyson", 1500, 400, 8},
{"Микроволновка", "Panasonic", 800, 200, 15},
{"Тостер", "Bosch", 700, 100, 12},
{"Фен", "Philips", 1200, 50, 20},
{"Чайник", "Russell Hobbs", 1500, 30, 18},
{"Стиральная машина", "LG", 2000, 900, 5},
{"Посудомоечная машина", "Siemens", 1800, 1200, 7},
{"Утюг", "Rowenta", 2000, 70, 25},
{"Телевизор", "Sony", 100, 1200, 10},
{"Кофеварка", "Krups", 900, 150, 15},
{"Монитор", "Samsung", 50, 250, 7},
{"Миксер", "Samsung", 600, 80, 10},
{"Микрофон", "Samsung", 10, 120, 15}
};
ofstream outputFile("appliances.txt");
if (outputFile.is_open()) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < (sizeof(appliances)/sizeof(*appliances)); j++) {
switch (i) {
case 0:
outputFile << left << setw(30 + 1) << appliances[j].name;
break;
case 1:
outputFile << setw(20) << left << appliances[j].brand;
break;
case 2:
outputFile << setw(20) << left << appliances[j].power;
break;
case 3:
outputFile << setw(20) << left << appliances[j].price;
break;
case 4:
outputFile << setw(20) << left << appliances[j].quantity;
break;
}
}
outputFile << "\n";
}
outputFile.close();
cout << "Файл успешно создан." << endl;
} else {
cout << "Не удалось создать файл." << endl;
}
return 0;
}
Но у меня возникает проблема в том что файле я получаю вот такой вид

Я попробовал изменять значение setw и даже считать длину названия товара и использовать ее в качестве значения setw, но у меня все равно получилось смещение.
Подскажите пожалуйста как решить эту проблему.
Я заранее вам очень благодарен
Чтобы выровнять первую строку при выводе в файле, можно использовать функцию substr() из библиотеки string. Эта функция позволяет извлекать подстроки из строки, указывая начальный индекс и количество символов, которые нужно извлечь. В данном случае, можно использовать substr() для извлечения первых 30 символов из названия товара, и затем выровнять эту подстроку с помощью setw(). Например, можно заменить строку
outputFile << left << setw(30 + 1) << appliances[j].name;
на
outputFile << left << setw(30) << appliances[j].name.substr(0, 30);
Это извлечет первые 30 символов из названия товара и выровняет их по левому краю с помощью setw().
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
struct HouseholdAppliance {
string name;
string brand;
int power;
float price;
int quantity;
};
int main() {
HouseholdAppliance appliances[14] = {
// (Ваши данные по бытовой технике здесь)
{"Холодильник", "Samsung", 300, 800, 10},
{"Пылесос", "Dyson", 1500, 400, 8},
{"Микроволновка", "Panasonic", 800, 200, 15},
{"Тостер", "Bosch", 700, 100, 12},
{"Фен", "Philips", 1200, 50, 20},
{"Чайник", "Russell Hobbs", 1500, 30, 18},
{"Стиральная машина", "LG", 2000, 900, 5},
{"Посудомоечная машина", "Siemens", 1800, 1200, 7},
{"Утюг", "Rowenta", 2000, 70, 25},
{"Телевизор", "Sony", 100, 1200, 10},
{"Кофеварка", "Krups", 900, 150, 15},
{"Монитор", "Samsung", 50, 250, 7},
{"Миксер", "Samsung", 600, 80, 10},
{"Микрофон", "Samsung", 10, 120, 15}
};
ofstream outputFile("appliances.txt");
if (outputFile.is_open()) {
for (int j = 0; j < (sizeof(appliances)/sizeof(*appliances)); j++) {
outputFile << left << setw(30 + 1) << appliances[j].name;
outputFile << setw(20) << left << appliances[j].brand;
outputFile << setw(20) << left << appliances[j].power;
outputFile << setw(20) << left << appliances[j].price;
outputFile << setw(20) << left << appliances[j].quantity;
outputFile << "\n";
}
outputFile.close();
cout << "Файл успешно создан." << endl;
} else {
cout << "Не удалось создать файл." << endl;
}
return 0;
}