void getPlayerRolls(int RollValues[], int& AttemptCount) {
int i = 0;
int FrameNumber = 0;
int RollNumber = 0;
while(RollValues[i] != -1) {
FrameNumber++;
cout << "Frame # " << FrameNumber << endl;
cout << "Roll #1 "
<< " ";
cin >> RollValues[i];
i++;
cout << "Roll #2 "
<< " ";
cin >> RollValues[i];
i++;
cout << endl;
}
}
我的期望是,当为其中一个掷骰值输入-1时,程序将终止。我试图创建一个可以与数组一起使用的while循环,但是在确定如何执行此操作时遇到了麻烦。
答案 0 :(得分:2)
我从您的函数中删除了不属于问题的行,但这也许可以澄清:
while(RollValues[i] != -1) {
cin >> RollValues[i];
i++;
cin >> RollValues[i];
i++;
i++;
}
测试循环条件变量时i
的值是什么?
输入的第一个rollvalue读入数组中的某个位置,但是i
递增,因此,如果从RollValues [i]读回,则从内存中的另一个位置!不仅如此,您永远不会在接受第二卷之前先看第一卷。然后再次增加i
。到您回到循环顶部时,i
已经前进了3次,并且没有对输入的卷进行过测试。
您还有其他问题,例如
接收数组没有关联的“大小”信息,因此您现在不必知道调用方提供的数组大小。因此,您的代码无法防止内存溢出。
在while循环中,每次迭代前进3次,因此,即使您的循环条件检查了边界情况,您仍然可能走回了数组 before 的末尾到循环顶部。
因此,我建议以下内容:
1)将数组的大小传递到函数中,或使用更安全的数据结构,例如std :: array或std :: vector
2)每个循环只处理一次掷骰,并在前进之前检查自己是否在界限之内。
3)在查看完索引所指向的位置的值之前,不要提高索引变量的大小。