проблема с setw () и ofstream - PullRequest
0 голосов
/ 29 марта 2012

Когда я использую setw() с ofstream, запись в файл выполняется неправильно.Он пропускает много строк вывода, а в Notepad ++ выходной файл показывает множество пустых значений.Но когда я пробую его с "\t", он отлично работает.

Не могли бы вы объяснить, почему?

#include<fstream>
#include<iomanip>
using namespace std;
int main(){

    ofstream myfile;
    myfile.open ("test.txt");

    for(int i=0;i<300;i++){
        myfile <<"\n"<<setw(15)<<0<<setw(15)<<0<<setw(15)<<10000<<setw(15)<<6000;
        //myfile <<"\n\t"<<0<<"\t"<<0<<"\t"<<10000<<"\t"<<6000;
    }
    return 0;
}

Редактировать:

Я немного больше протестировал и выяснилчто проблема специфична для следующей конфигурации.Я использую guest на win7 с использованием virtualbox, и моя программа пыталась записать файл на диск операционной системы с помощью virtualbox общая папка, смонтированная на ubuntu .

Когда я пытался запустить программу внутри ubuntu , она работала нормально.Кроме того, я попытался сделать то же самое на моем персональном компьютере, на котором также есть хост win7 и ubuntu guest.Я попробовал ту же программу на смонтированном диске от win7 до ubuntu , и она работала нормально.

Мне интересно, было ли это из-за настроек на моем рабочем компьютере.Во всяком случае, сейчас это не критично.Но больше идей приветствуются.

1 Ответ

0 голосов
/ 24 июня 2016

Решением может быть обеспечение того, чтобы вы действительно использовали пробелы (или другие символы) для установки ширины между данными:

#include<fstream>
#include<iomanip>
using namespace std;
int main(){
    char a='î';
    int  b=15;
    ofstream myfile;
    myfile.open ("test.txt");

    for(int i=0;i<3;i++){
           myfile <<'\n'       <<setfill(a)<<setw(b)
                  <<0          <<setfill(a)<<setw(b)
                  <<0          <<setfill(a)<<setw(b)
                  <<10000      <<setfill(a)<<setw(b)
                  <<6000       ;
    }
    myfile <<'\n';
    return 0;
}

дает

$ g ++ a.cpp -std =c ++ 0x -Wall -oa && ./a && cat test.txt

::::::::::::::0::::::::::::::0::::::::::10000:::::::::::6000
::::::::::::::0::::::::::::::0::::::::::10000:::::::::::6000
::::::::::::::0::::::::::::::0::::::::::10000:::::::::::6000
...