Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

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

У меня есть программа на C++

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  
#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(). Например, можно заменить строку

1
 outputFile << left << setw(30 + 1) << appliances[j].name;  


на

1
 outputFile << left << setw(30) << appliances[j].name.substr(0, 30);   


Это извлечет первые 30 символов из названия товара и выровняет их по левому краю с помощью setw().

Аватар пользователя
Оракул
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
 #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;  
}