为什么以下代码不起作用
#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
代码有什么问题?
答案 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";
}