C ++附加到字符串并写入文件

时间:2010-08-24 16:28:10

标签: c++ string file-io file

为什么以下代码不起作用

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;

int main(){
    string data;
    int i=0;

    while(i <= 5){
      i++;
      data += i;
      data += "\n";
    }

    ofstream myfile;
    myfile.open ("data.txt");
    myfile << data;
    myfile.close();
}

应该 追加数字然后换行并将其写入文件(不会还不存在

该文件应如下所示......

1
2
3
4
5

代码有什么问题?

5 个答案:

答案 0 :(得分:11)

为什么不使用operator<<

ofstream myfile;
myfile.open ("data.txt");
for ( int i = 1; i <= 5; ++i )
  myfile << i << "\n";
myfile.close();

答案 1 :(得分:2)

您的代码存在多个问题。首先,您是#include - 多个已弃用的标头,其中<stdio.h>应为<iostream><string.h>应为<string><stdlib.h> 1}}应该是<cstdlib>

至于你的具体问题,它正是你要求它做的。问题是,你并没有要求它做你想做的事情它做什么。在您的代码data += i;中,您要“将二进制值i附加到您的代码尽职尽责的string”。如果在具有二进制文本的文本编辑器中打开生成的文本文件,您会发现它是您插入的二进制数据。

您要做的是将整数转换为字符串表示形式,并将其附加到文本文件中。以C ++方式执行此操作的一种简单方法是使用stringstream,如下所示:

#include <iostream>
#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <cstdlib>
using namespace std;

int main(){
    int i=0;

        stringstream ss;
    while(i <= 5){
      i++;
            ss << i << endl;
    }

    ofstream myfile;
    myfile.open ("data.txt");
    myfile << ss.str();
    myfile.close();
}

答案 2 :(得分:1)

我看到的主要问题是你通过向它添加整数来构建字符串数据 你真正想要的是整数的字符版本,它需要这样的东西:

while(i <= 5){
  i++;
  data += char(i+48);
  data += "\n";
}

这样做是将十进制表示的偏移量(48)添加到数字的ASCII表示中 编辑:根据您的设置方式,根据您是否要打印最多6个,您还要将while(i <= 5)替换为while(i < 5) while循环的内部。

答案 3 :(得分:1)

我不认为运算符+ =(int)是为std :: string定义的,所以如果它完全编译,行data += i;将被翻译为:

 data += (char) i;

让我们在这里使用实际的字符:

char i='0';   

while(i <= '5'){   
  i++;   
  data += i;   
  data += "\n";   
} 

此外,你包括<string.h>这是字符串的C运行时库(这里的字符串是微小整数的数组);您实际需要包含的是<string>,它是std :: string的C ++库。据我所知,你根本不需要stdio.h,stdlib.h或string.h。

答案 4 :(得分:1)

或者您也可以使用sprintf:

    char temp[10]; // assuming your string rep of the number won't take >9 char.

    while(i <= MAX){
            i++;
            sprintf(temp,"%d",i);
            data += temp;
            data += "\n";
    }