为什么我不能让这个数组从文件中正确地提取字符串,它第一次通过时很好,但是当它循环时它失败了?
Why can't I get this array to properly pull string from a file, it does fine the first pass, but when it loops it fails?
我正在尝试从文本文件中提取一系列视频游戏机名称。文本文件是这样读的,
Nintendo Entertainment System
57
Sega Genesis
34
Microsoft Xbox 360
58
Sony PlayStation 4
261
Atari 2600
26
Nintendo Game Cube
52
所以我设置的是将名称保存在数组中,然后是它们的价格,然后重复。问题似乎是它获得了第一个控制台名称,获得了第一个价格,然后当它重复时失败并且没有更多的名称加载并且价格变为 -858993460。
这是我的 loadArrays 函数 -
void loadArrays(string consoleNames[], int consolePrices[], int& size)
{
ifstream dataFile("prices.txt");
int i = 0;
int cont = 1;
do
{
getline(dataFile, consoleNames[i]);
dataFile >> consolePrices[i];
i++;
size += 1;
/*if (consolePrices = 0)
{
size = size - 1;
for (int j = 0; i < size; j++)
{
consoleNames[j] = consoleNames[j + 1];
consolePrices[j] = consolePrices[j + 1];
}
cont = 0;
}*/
if (size == 6)
break;
} while (cont == 1);
}
这就是我得到的
Failed Output
问题可能是 getline 没有正确移动到下一个字符串?
dataFile >> consolePrices[i];
在第一次迭代时在 istream 中留下 \n
。
然后 getline(dataFile, consoleNames[i]);
在第二次迭代中提取新的行符号,你得到空字符串。之后 dataFile >> consolePrices[i];
尝试读取 int 但遇到字符串 Sega Genesis
,使 consolePrices[i];
未初始化且 istream 失败。进一步的迭代无法读取失败的 istream。
我正在尝试从文本文件中提取一系列视频游戏机名称。文本文件是这样读的,
Nintendo Entertainment System
57
Sega Genesis
34
Microsoft Xbox 360
58
Sony PlayStation 4
261
Atari 2600
26
Nintendo Game Cube
52
所以我设置的是将名称保存在数组中,然后是它们的价格,然后重复。问题似乎是它获得了第一个控制台名称,获得了第一个价格,然后当它重复时失败并且没有更多的名称加载并且价格变为 -858993460。
这是我的 loadArrays 函数 -
void loadArrays(string consoleNames[], int consolePrices[], int& size)
{
ifstream dataFile("prices.txt");
int i = 0;
int cont = 1;
do
{
getline(dataFile, consoleNames[i]);
dataFile >> consolePrices[i];
i++;
size += 1;
/*if (consolePrices = 0)
{
size = size - 1;
for (int j = 0; i < size; j++)
{
consoleNames[j] = consoleNames[j + 1];
consolePrices[j] = consolePrices[j + 1];
}
cont = 0;
}*/
if (size == 6)
break;
} while (cont == 1);
}
这就是我得到的 Failed Output
问题可能是 getline 没有正确移动到下一个字符串?
dataFile >> consolePrices[i];
在第一次迭代时在 istream 中留下 \n
。
然后 getline(dataFile, consoleNames[i]);
在第二次迭代中提取新的行符号,你得到空字符串。之后 dataFile >> consolePrices[i];
尝试读取 int 但遇到字符串 Sega Genesis
,使 consolePrices[i];
未初始化且 istream 失败。进一步的迭代无法读取失败的 istream。