Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как выровнять первую строчку при выводе в файле?

Природный Парменид Ученик (159), закрыт 1 год назад
У меня есть программа на C++

  
#include
#include
#include
#include
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, но у меня все равно получилось смещение.
Подскажите пожалуйста как решить эту проблему.
Я заранее вам очень благодарен
Лучший ответ
Татьяна Просветленный (36498) 1 год назад
Чтобы выровнять первую строку при выводе в файле, можно использовать функцию 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().
Природный ПарменидУченик (159) 1 год назад
Я попробовал ваш метод, но результат тотже.
Код
Остальные ответы
S.H.I. Оракул (74014) 1 год назад
 #include   
#include
#include
#include
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;
}
Похожие вопросы