程序编译、运行,但不以 DevC++ 结束
Posted
技术标签:
【中文标题】程序编译、运行,但不以 DevC++ 结束【英文标题】:Program Compiles, Runs, but doesn't end in DevC++ 【发布时间】:2014-12-14 23:32:41 【问题描述】:我编写了一个程序来对所有小于或等于 N 的奇数求和。它不是最有效或最有说服力的程序,但它在 Codepad.org 上的编译器中工作,在 DevC++ 中不起作用。通常,当我编写的程序陷入某种无限循环时,程序会在 DevC++ 中崩溃,Windows 会停止它并让我知道。
在这里,程序编译并运行,但只是停留在光标闪烁的状态下,什么也不做。 Windows 不会停止它,没有任何反应,程序没有完成,无论我让它坐多久。我猜这是 DevC++ 的问题,除非它是我的 Codepad 忽略的代码的问题。有人会向我解释这里发生了什么吗?
这是我的代码:
#include <iostream>
using namespace std;
int odd(int N)
int i;
int sum = 0;
for(i = 0; i <= N; ++i)
while((i % 2) != 0)
sum = sum + i;
return sum;
int main()
int N;
cout << "Pick a value: ";
cin >> N;
cout << "The sum of all numbers <= to " << N << " is: " << odd(N);
return 0;
我已对 if 语句进行了建议的更改,但出现了同样的问题:
#include <iostream>
using namespace std;
int odd(int N)
int i;
int sum = 0;
for(i = 0; i <= N; ++i)
if ((i % 2) != 0)
sum = sum + i;
return sum;
int main()
int N;
cout << "Pick a value: ";
cin >> N;
cout << "The sum of all odd numbers <= to " << N << " is: " << odd(N);
return 0;
【问题讨论】:
仅供参考:它真的无法在 codepad.org 上正确运行;您不能输入N
,而是使用0
。例如,如果您添加N=5
,codepad.org 会在一段时间后发出超时。
我知道,这就是为什么我发表评论说它可能是键盘忽略的东西,因为它使用 0 而不是其他值。
【参考方案1】:
while((i % 2) != 0)
sum = sum + i;
这是一个无限循环。因为如果 (i % 2 != 0)
为真,那么程序将一次又一次地递增 sum。您可能想要做的是使用 if
语句而不是 while
【讨论】:
好的,我明白你的意思了,我把它改成了一个 if 语句,但是同样的事情一直在发生。即使我注释掉除 main 之外的所有内容,并在用户输入“N”后要求它打印出“N”,同样的事情也会发生。 好的,我已经意识到问题所在。无论我做了什么更改和编译,或者即使我尝试保存文件,当我点击“运行”时,它不会随着这些更改或保存而运行,只是我第一次运行和编译时的原始代码。因为当我将您的代码复制并粘贴到 main 并注释掉我最初放置的所有内容时,它仍然会在注释掉时打印“选择一个数字”。 @Sarah 你想要做的是点击 Compile & Run 而不是 Run。 Run 只是运行最新构建的可执行文件,而 Compile & Run 将在运行之前将您的最新代码编译成新的可执行文件。 我知道,我一直在点击编译和运行。 我不知道这是否有帮助,但这里有一个文档,其中包含正在发生的事情的屏幕截图。 docs.google.com/document/d/…【参考方案2】:似乎编辑工作正常,请尝试删除旧的输出文件并重建并重新编译整个程序。 输出似乎如下:
选择一个值:52
所有奇数
进程在 1.034 秒后退出,返回值为 0 按任意键继续 。 . .
【讨论】:
添加您的代码并更清楚地解释问题。【参考方案3】:确保上次运行的窗口已关闭,否则编译器将不会重新编译,而只会运行您更改之前的先前版本。您可能会在调试模式下将此视为底部说明的错误。 while() 是一个无限循环,因为 i 在 while() 或其 内没有更改,因此请使用 if
【讨论】:
更优雅:if(N%2==0) m=N-1;else m=N;总和=0; for(i=1;i以上是关于程序编译、运行,但不以 DevC++ 结束的主要内容,如果未能解决你的问题,请参考以下文章