我现在已经摆弄了一段时间,所有它返回的是' save.rp'中的前两个数字。文件分开,
int characterPosition [2] = {0,0};
string convToStr(char *ch)
{
stringstream ss;
string res;
ss << ch;
ss >> res;
return res;
}
int convToInt(string ch)
{
stringstream ss(ch);
int num;
ss >> num;
return num;
}
void loadSave()
{
string loadPos;
ifstream file("save.rp");
if ((file.is_open())&&(file.good()))
{
getline(file,loadPos);
}
file.close();
char str[] = {*loadPos.c_str()};
char delim[] = "-";
char *result = NULL;
result = strtok(str, delim);
int num = 0;
while (result != NULL)
{
characterPosition[num] = convToInt(convToStr(result));
cout << characterPosition[num] << endl;
result = strtok(NULL, delim);
}
}
&#39; save.rp&#39;文件看起来像这样:400-2000
它应该分别返回每个数字,在这种情况下为400和2000.
我在这里做些蠢事吗?
答案 0 :(得分:2)
这一行
char str[] = {*loadPos.c_str()};
相当于
char str[] = {'4'};
这显然不是你想要的,你想要的
char str[] = "400-2000";
这样做
char str[500]; // assuming your line length dont exceed 500
strcpy( str, loadPos.c_str() );
答案 1 :(得分:0)
问题出在这里
char str[] = {*loadPos.c_str()};
loadPos.cstr()
返回指向“400-2000”的指针;
*取消引用并给出第一个字符 - 即'4'。
用第一个char'4'初始化str []。 str现在是一个以'4'开头的数组,上帝知道之后是什么。您的所有操作都已完成。
将以上行更改为
char str[100];
strcpy(str,loadPos.c_str());
以下是如何避免strtok和convToStr
int convToInt(string ch)
{
stringstream ss(ch);
int num;
ss >> num;
return num;
}
void loadSave()
{
string loadPos;
ifstream file("save.rp");
if ((file.is_open())&&(file.good()))
{
getline(file,loadPos);
}
file.close();
stringstream ss(loadPos);
string token;
while(getline(ss, token, '-'))
{
int r = convToInt(token);
cout<<r<<endl;
}
}
答案 2 :(得分:0)
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
ifstream inf("save.rp");
int characterPosition [2] = {0,0};
int num=0;
string line_buff;
while(inf.good()){
getline(inf, line_buff, '-');
stringstream ss(line_buff);
ss >> characterPosition[num++];
}
cout << characterPosition[0] << ',' << characterPosition[1] << endl;
return 0;
}