当满足条件时,While循环未结束
While loop not ending when condition is met
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循环来处理数组,但我很难确定如何执行此操作。
我从函数中删除了不属于问题的行,但这可能会澄清:
while(RollValues[i] != -1) {
cin >> RollValues[i];
i++;
cin >> RollValues[i];
i++;
i++;
}
测试循环条件变量时,i
的值是多少?
输入的第一个rollvalue会被读取到数组中的某个位置,但随后i
会递增,因此,如果从RollValues[i]读回,则会从读取内存中的另一个位置!不仅如此,在接受第二卷之前,你永远不会看第一卷。然后再次递增i
。当你回到循环的顶部时,i
已经前进了3次,并且两个输入的滚动都没有经过测试。
你也有其他问题,比如
接收数组时没有关联的"大小"信息,因此您现在不知道调用者提供的数组有多大。因此,您的代码无法防止内存溢出。
在while循环中,每次迭代前进3次,因此即使循环条件检查边界情况,您仍然可以在返回循环顶部之前离开数组的末尾。
因此,我建议如下:
1( 将数组的大小传递到函数中,或者使用更安全的数据结构,例如std::array或std::vector
2( 每个循环只处理一次滚动,并在前进前检查您是否在边界内。
3( 在查看完索引变量所引用位置的值之前,不要推进索引变量。
相关文章:
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- while循环中while循环的时间复杂度是多少
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 擦除while循环中迭代的元素
- 为什么我不能在 while 循环中创建线程?
- 退出简单while循环时出现问题
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 嵌套While循环不起作用(C++问题)
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 使用 GMP 的 while 循环出现问题
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 为什么在 while 循环中返回表达式不起作用
- 如何使用 do while 循环确定最高值和最低值
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- OpenCV QT,显示视频的帧(不使用while循环)
- 在 while 循环中使用 pow() 函数 C++
- C++ 制作/命名不初始化的向量(在 while 循环中)
- std::getline没有在while循环中重新请求用户输入