C ++ для цикла не выход - PullRequest
       31

C ++ для цикла не выход

1 голос
/ 23 октября 2011

У меня есть цикл for, очень простой, в моей программе, и я хочу, чтобы он прошел цикл и что-то делал какое-то минимальное количество раз.Однако цикл просто ... останавливается.Но не переходит к следующей вещи в программе.Например, когда min равно 9, он работает от i = 0 до i = 8, затем останавливается.Он должен выйти из цикла for, но он не выполняет следующую команду печати и не выполняет цикл снова.Это просто останавливается.Программа зависает, абсолютно ничего не делая, насколько я могу судить.Я не понимаю, почему это так.

Функция merged.put (), которую я хочу выполнить, просто помещает x или y в слияние, в зависимости от условия.Эта часть работает.Это лишь малая часть гораздо более крупной программы.sp1, sp2 и объединены все определены в другом месте.

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";

РЕДАКТИРОВАТЬ: я не публикую весь код, он длиной в несколько сотен строк.Тип мин. Int.Ответ там был полезен, когда << endl был добавлен к последнему оператору печати, он напечатал.Моя проблема теперь, кажется, здесь, застревает на втором, потому что я не увеличивал i.Позор мне ... спасибо за помощь.(Это сразу после кода выше) </p>

if (sp_large == 2) {
        cout << "1" << endl;;
        while (i < sp2.get_size()) {
            merged.put(sp2.get_num(i));
        }
    }
    else {
        while (i < sp1.get_size()) {
            merged.put(sp1.get_num(i));
        }   
        cout << "2" << endl;
    }

РЕДАКТИРОВАТЬ: Проблема решена, спасибо за помощь.

1 Ответ

8 голосов
/ 23 октября 2011

Держу пари, что на самом деле это более поздняя часть программы, которая зависает.

Эта строка:

cout << "out";

просто помещает «out» в выходной буфер и фактически не выводит «out», пока выходной буфер не будет очищен. (Что может произойти немедленно, но маловероятно.) Измените эту строку следующим образом:

cout << "out" << endl;

и "out" будут напечатаны, как только эта строка будет запущена. Это поможет вам определить, зависла ли программа до того, как она дойдет до этой строки или где-то позже.

...