0

私はしばらくこれをいじっていましたが、返されるのは「save.rp」ファイルの最初の2つの数字だけで、別々の行にあります。

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);
    }
}

「save.rp」ファイルは次のようになります: 400-2000

この場合、400 と 2000 の各数値を個別に返すことになっています。

私はここでばかげたことをしていますか?

4

3 に答える 3

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() );
于 2013-04-22T23:28:08.960 に答える
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;
}
于 2013-04-22T23:58:07.277 に答える
0

問題はここにあります

char str[] = {*loadPos.c_str()};

loadPos.cstr()「400-2000」へのポインターを返します。* は逆参照し、最初の文字、つまり '4' を与えます。最初の文字「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;
    }

}
于 2013-04-22T23:28:55.210 に答える