解析関数に問題があったため、実行時に特定の変数の値を伝えるためにいくつかの cout ステートメントを配置しました。atoi が文字を正しく変換していないと思います。
奇妙な動作をしている私のコードの短いスニペットを次に示します。
c = data_file.get();
if (data_index == 50)
cout << "50 digit 0 = '" << c << "' number = " << atoi(&c) << endl;
このステートメントの出力は次のとおりです。
50 digit 0 = '5' number = 52
私はループ内でこのコードを呼び出していますが、最初の 47 文字を正しく変換し、48 文字目には整数の後に 0 を追加し、49 文字目には 1 を追加し、50 文字目には 1 を追加します (見たここでは 2 が追加され、57 番目の文字まで 9 が追加されます。その後、239 番目の文字まで正しく変換されます。
これは奇妙ですか、それとも何ですか?
もう少し明確にするために、関数全体を投稿します。この関数には、空の double 配列 (ping_data) へのポインターが渡されます。
int parse_ping_data(double* ping_data)
{
ifstream data_file(DATA_FILE);
int pulled_digits [4];
int add_data;
int loop_count;
int data_index = 0;
for (char c = data_file.get(); !data_file.eof(); c = data_file.get())
{
if (c == 't' && data_file.get() == 'i' && data_file.get() == 'm' && data_file.get() == 'e' && data_file.get() == '=')
{
loop_count = 0;
c = data_file.get();
if (data_index == 50)
cout << "50 digit 0 = '" << c << "' number = " << atoi(&c) << endl;
pulled_digits[loop_count] = atoi(&c);
while ((c = data_file.get()) != 'm')
{
loop_count++;
if (data_index == 50)
cout << "50 digit " << loop_count << " = '" << c << "' number = " << atoi(&c) << endl;
pulled_digits[loop_count] = atoi(&c);
}
add_data = 0;
for (int i = 0; i <= loop_count; i++)
add_data += pulled_digits[loop_count - i] * (int)pow(10.0,i);
if (data_index == 50)
cout << "50 index = " << add_data << endl;
ping_data[data_index] = add_data;
data_index++;
if (data_index >= MAX_PING_DATA)
{
cout << "Error parsing data. Exceeded maximum allocated memory for ping data." << endl;
return MAX_PING_DATA;
}
}
}
data_file.close();
return data_index;
}