Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;For循环不退出_C++_For Loop_Break - Fatal编程技术网

C++ C++;For循环不退出

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

我有一个for循环,一个非常简单的循环,在我的程序中,我希望它能循环通过,并以最少的次数做一些事情。然而,循环只是…停止。但没有进入下一个项目。例如,当min为9时,它运行i=0到i=8,然后冻结。它应该退出for循环,但不会执行下一条打印指令,也不会再次执行循环。它只是停止了。程序挂起了,据我所知,什么也没做。我不明白这是为什么

我要执行的merged.put()函数只是根据条件将x或y放入merged中。那部分有效。这只是一个更大计划的一小部分。sp1、sp2和merged都在别处定义

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;icout我打赌这实际上是程序的一个后期部分

这一行:

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;