Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Инструкция break - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Удалить элементы из строки (исправить код) http://www.cyberforum.ru/cpp-beginners/thread687625.html
Я написал программу для удаления текста после первой запятой, а мне НЕОБХОДИМО чтобы удалялось только первое слово, например: aaa, bbb aaa, ccc aaa aaa, ddd aaa .... И программа должна удалить bbb...
C++ Стеки Реализовать программу, в которой будут использоваться стеки (магазинный и кольцевой) и очередь. В самих программах реализовать такие функции: заполнение стека(очереди) вручную, удаление и добавление... http://www.cyberforum.ru/cpp-beginners/thread687624.html
Почему в выводе выдаются предупреждения "warning C4101: sm: неиспользованная локальная переменная" C++
// gd.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include "stdlib.h" #include "math.h" #include "stdio.h" #include "conio.h" #include "locale.h" void...
Надо определить матрицу как МОПРЕД C++
Народ пожалуйста помогите!!!! 3 4 5 6 4 6 7 -3 3 -4 5 2 http://www.cyberforum.ru/attachment.php?attachmentid=197201&stc=1&d=1351940705
C++ Найти вектор, в котором записаны максимумы всех строк матрицы http://www.cyberforum.ru/cpp-beginners/thread687597.html
По заданной квадратной матрице найти вектор, в котором записаны максимумы всех строк матрицы.
C++ Реализация итерационных циклов С++ Помогите, пожалуйста, с написанием программы подробнее

Показать сообщение отдельно
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55

Инструкция break - C++

03.11.2012, 15:29. Просмотров 732. Ответов 4
Метки (Все метки)

Эм, балуюсь с C++. Значит, отбираю простые числа, первый вариант программы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <cstdio>
#include <cstring>
using namespace std;
 
int main() {
    int i, j, k, simpleNums[200];
 
    k = 0;
    for (i=2; i<200; i++) {
        for (j=2; j<i; j++) {
            if (!(i%j))
                break;
        if (j == i-1)
            simpleNums[k] = i;
            k++;
        }
    }
 
    for (i=0; i<k; i++)
        cout << simpleNums[i] << " ";
 
    return 0;
}
Получаю ошибку Segmentation fault. Раньше не попадалась, почитал в Википедии о ней, ничего не понял. Потом обратил внимание на то, что не выделил фигурными скобками второе условие, исправил:

C++
1
2
3
4
5
6
7
8
9
10
11
    k = 0;
    for (i=2; i<200; i++) {
        for (j=2; j<i; j++) {
            if (!(i%j))
                break;
        if (j == i-1) {
            simpleNums[k] = i;
            k++;
        }
        }
    }
Всё работает. Потом обратил внимание на то, что две фигурные скобки в цикле находятся на одном уровне. Сдвинул второе условие, понял, что второе моё условие относится к второму циклу, а не к первому, как я задумывал изначально. Пришёл к выводу, что break делает выход из инструкции, а условие - это тоже инструкция. Т.е. чтобы выйти из цикла, надо использовать два break. Что и подтверждается таким вариантом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    k = 0;
    for (i=2; i<200; i++) {
        j = 2;
        for (; j<i; j++) {
            if (!(i%j)) {
                break;
                break;
            }
        }
        if (j == i) {
            simpleNums[k] = i;
            k++;
        }
    }
Потом заглянул в книжку (вдохновлялся примером из неё), увидел следующее:

C++
1
2
    ...for (j=2; j<=(i/j); j++)
        if (!(i%j)) break;
Потыркал свой код и убедился, что и мне достаточно одного break в случае, если не выделять для условия блока кода (фигурных скобок). Получается, так:

C++
1
2
3
    for (; j<i; j++)
        if (!(i%j))
            break;
и так:

C++
1
2
3
4
    for (; j<i; j++) {
        if (!(i%j))
            break;
    }
Следовательно, break делает выход из ближайшего блока кода (а цикл изначально блок)? Ага, вроде бы так, но почему работает второй приведённый мною вариант? Короче, я запутался :/
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru