setw()和ofstream的问题

issue with setw() and ofstream

本文关键字:问题 ofstream setw      更新时间:2023-10-16

当我将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 <<"nt"<<0<<"t"<<0<<"t"<<10000<<"t"<<6000;
    }
    return 0;
}

编辑:

我又测试了一点,发现问题是以下配置特有的。我使用virtualboxwin7上使用ubuntu guest,并且我的程序试图使用ubuntu中安装的virtualbox共享文件夹在主机操作系统驱动器上写入文件。

当我尝试在ubuntu中运行程序时,它运行得很好。此外,我尝试在我的个人电脑上做同样的事情,该电脑也有win7主机和ubuntu来宾。我在从win7ubuntu的挂载驱动器上尝试了相同的程序,效果很好。

我想知道是不是因为我工作电脑上的设置。不管怎样,现在已经不重要了。但更多的见解是受欢迎的。

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

#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.cp-std=c++0x-Wall-o a&amp/a&amp;cat test.txt

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