setw()和ofstream的问题

时间:2012-03-28 22:35:45

标签: c++ ubuntu virtualbox iostream

setw()ofstream一起使用时,它不会正确写入文件。它正在跳过许多输出行,在Notepad ++中,输出文件显示了很多NULL。但是,当我使用"\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;
}

编辑:

我测试了一点,并发现该问题特定于以下配置。我使用 virtualbox win7 上使用来宾,我的程序尝试使用 ubuntu 上安装了> virtualbox 共享文件夹。

当我尝试在 ubuntu 中运行程序时,它工作正常。此外,我尝试在我的个人计算机上执行相同的操作,该计算机还具有win7主机和 ubuntu 来宾。我尝试了从 win7 ubuntu 的已安装驱动器上的相同程序,它运行正常。

我想知道是不是因为我的工作电脑上的设置。无论如何它现在不重要。但欢迎提供更多见解。

1 个答案:

答案 0 :(得分:0)

解决方案可能是确保您确实使用空格(或其他字符)来设置数据之间的宽度:

#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 -o a&amp;&amp; ./a&amp;&amp; cat test.txt

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