c++ - 为什么while循环中的返回表达式不起作用
问题描述
下面的代码是count int m可以由数组数据中的哪个数字组成,但是return 0;
exit的表达式不起作用,它会发生堆栈损坏,我必须使用exit(0);
,为什么?
#include <iostream>
#include <cstdlib>
void increase(bool seq[], int size);
constexpr int n = 5;
int main()
{
int m, data[n];
bool seq[n];
std::cin >> m;
for (int i = 0; i < n; ++i) {
std::cin >> data[i];
seq[i] = false;
}
while (true) {
bool isEnd = true;
for (int i = 0; i < n; ++i)
if (!seq[i])
isEnd = false;
if (isEnd) {
std::cout << "IMPOSSIBLE!!!";
return 0;
}
int sum = 0;
for (int i = 0; i < n; ++i)
if (seq[i])
sum += data[i];
if (sum == m) {
for (int i = 0; i < n; ++i)
if (seq[i])
std::cout << data[i] << " ";
std::cout << std::endl;
return 0;
}
increase(seq, n);
}
}
void increase(bool array[], int size)
{
bool isCarry = true;
for (int i = size; i >= 0; --i) {
if (isCarry) {
isCarry = array[i];
array[i] = !array[i];
}
}
}
解决方案
此代码不正确
void increase(bool array[], int size)
{
bool isCarry = true;
for (int i = size; i >= 0; --i) {
if (isCarry) {
isCarry = array[i];
array[i] = !array[i];
}
}
}
它应该是
void increase(bool array[], int size)
{
bool isCarry = true;
for (int i = size - 1; i >= 0; --i) {
if (isCarry) {
isCarry = array[i];
array[i] = !array[i];
}
}
}
大小为 N 的数组的有效索引为 0 到 N - 1(含)。
推荐阅读
- php - 动态查找特定数组索引
- python - pygame“Paint”程序 - 在画布上绘制空矩形
- google-chrome - ThreeJS DracoLoader 在 Chrome 而不是 Firefox 中工作的原因是什么?
- ios - SVG 线性渐变未在 iOS Ionic/Angular 应用程序中呈现
- javascript - javascript动态更改angularjs ui-router ui-view中的嵌套视图
- typescript - 如何为有区别的联合创建通用组合函数
- php - Laravel - 在验证字段中显示自定义错误
- google-cloud-platform - Google Cloud Functions - 部署挂起 5-10 分钟,然后给出错误“部署失败:操作中断”
- javascript - React Native console.error 版本不匹配
- c# - 如何使用 CSOM 检索 SharePoint 共享链接