C++ C++;For循环不退出
我有一个for循环,一个非常简单的循环,在我的程序中,我希望它能循环通过,并以最少的次数做一些事情。然而,循环只是…停止。但没有进入下一个项目。例如,当min为9时,它运行i=0到i=8,然后冻结。它应该退出for循环,但不会执行下一条打印指令,也不会再次执行循环。它只是停止了。程序挂起了,据我所知,什么也没做。我不明白这是为什么 我要执行的merged.put()函数只是根据条件将x或y放入merged中。那部分有效。这只是一个更大计划的一小部分。sp1、sp2和merged都在别处定义C++ C++;For循环不退出,c++,for-loop,break,C++,For Loop,Break,我有一个for循环,一个非常简单的循环,在我的程序中,我希望它能循环通过,并以最少的次数做一些事情。然而,循环只是…停止。但没有进入下一个项目。例如,当min为9时,它运行i=0到i=8,然后冻结。它应该退出for循环,但不会执行下一条打印指令,也不会再次执行循环。它只是停止了。程序挂起了,据我所知,什么也没做。我不明白这是为什么 我要执行的merged.put()函数只是根据条件将x或y放入merged中。那部分有效。这只是一个更大计划的一小部分。sp1、sp2和merged都在别处定义 in
int i;
int x;
int y;
for(i=0; i < min; i++)
{
cout << " here " + convert(i);
x = sp1.get_num(i);
y = sp2.get_num(i);
if(x >= y) {
merged.put(x);
}
else {
merged.put(y);
}
cout << " end" << endl;
}
cout << "out";
inti;
int x;
int-y;
对于(i=0;i cout我打赌这实际上是程序的一个后期部分
这一行:
cout << "out";
cout我敢打赌,这实际上是程序中挂起的后期部分
这一行:
cout << "out";
你能确定问题出在你发布的代码中吗?问题似乎是在后面出现的,但你看不到“退出”消息,因为在下一个挂起之前它不会被刷新。Add我看不出代码有任何明显的错误,所以尝试消除怀疑:注释掉调用以获取_num和/或合并,并直接为x和y赋值。这会改变什么吗?如果是,我们需要调查这些调用中发生了什么。你能请包括整个函数的代码,以及编译器可能产生的任何警告。count之后的内容可能是sp1.get_num(i)
或sp1.get_num(i)
在i=8时抛出异常,对其进行调试。您确定问题出在您发布的代码中吗?问题似乎是稍后才出现的,但您看不到“out”消息,因为在下一个挂起之前它不会被刷新。Add我看不出代码有任何明显的错误,所以尝试消除怀疑:注释掉调用以获取_num和/或合并,并直接为x和y赋值。这会改变什么吗?如果是,我们需要调查这些调用中发生了什么。你能请包括整个函数的代码,以及编译器可能产生的任何警告。count之后的内容可能是sp1.get_num(i)
或sp1.get_num(i)在i=8时抛出异常,调试它。如果是这样,它是C++运行时的一个错误,我不这么认为。它不是运行时的bug,而是缓冲输出如何工作。+1他是正确的,当我添加了它打印的EnDL。我正在努力把问题再缩小。我不知道缓冲输出是这样工作的。使用<代码> STD:FLUSS如果不需要换行符,则不使用std::endl
。如果使用std::cerr,则无需刷新,因为错误流未缓冲(因为在调试时,您希望了解打印的所有内容)如果是这样,它是C++运行时的一个bug,我不这么认为。它不是运行时的bug,而是缓冲输出的工作方式。+1他是正确的,当我添加了它打印的EnDL。我正在努力缩小问题。我不知道缓冲输出是这样工作的。使用<代码> STD:FLUSS而不是<代码> STD::如果您使用std::cerr,则不需要刷新,因为错误流没有缓冲(因为在调试时,您希望知道打印的所有内容)。
cout << "out" << endl;