gpt4 book ai didi

c++ - 访问冲突错误 (while (info[x] != ' ' ))

转载 作者:行者123 更新时间:2023-11-30 02:01:40 25 4
gpt4 key购买 nike

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

void main()
{
char info[81];
string names[5];
double sales[5][5];
int count = 0;
int x = 0;
ifstream file;
file.open("sales.txt");

while(!file.eof())
{
x = 0;
file.getline(info, 80);
while(info[x] != (char)39)
{
while(info[x] != ' ')
{
names[count] += info[x];
x++;
}
x++;
for(int y = 0; y < 4; y++)
{
sales[count][atoi(&info[x])] = (atoi(&info[x + 1]) * 10) + atoi(&info[x+2]) + (.01 *((atoi(&info[x+4])*10) + atoi(&info[x+5])));
x += 7;
}
x++;
}
count++;
}
}

运行时出现运行时错误,但我无法弄清楚具体原因。我不太熟悉我的编译器调试器,所以我在调试时遇到了麻烦。

最佳答案

我认为“x”超出了数组(信息)范围。在再次进入循环之前,您应该检查 x 是否小于 81。

例如:

while(x < 81 && info[x] != (char)39)
{
while(info[x] != ' ')
{
names[count] += info[x];
x++;
}
x++;
for(int y = 0; y < 4; y++)
{
sales[count][atoi(&info[x])] = (atoi(&info[x + 1]) * 10) + atoi(&info[x+2]) + (.01 *((atoi(&info[x+4])*10) + atoi(&info[x+5])));
x += 7;
}
x++;
}

无论如何,同样的情况也可能发生在循环内的行中。您假设您的输入将包含特定长度的字符串,如果没有发生,您将再次遇到该错误。


如果您尝试用空格分隔每一行,您可以考虑使用格式化输入(对于每一行):

        stringStream >> names[count];
string theNextString;
stringStream >> theNextString;
// Process the theNextString, which is the string after the last space (and until the next one)

此外,这一行非常容易出错。我建议你把它分成更小的部分更容易理解(并且更少依赖于行的确切长度)。您甚至可以使用格式化输入来获取数字。

sales[count][atoi(&info[x])] = (atoi(&info[x + 1]) * 10) + atoi(&info[x+2]) + (.01 *((atoi(&info[x+4])*10) + atoi(&info[x+5])));

使用格式化输入,它看起来像

int firstNumber;
stringStream >> firstNumber;

请注意,以上内容仅在您的号码以空格分隔时有效。

关于c++ - 访问冲突错误 (while (info[x] != ' ' )),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13887844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com