Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.53/57: Рейтинг темы: голосов - 57, средняя оценка - 4.53
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
1

Оператор continue

19.07.2009, 10:22. Просмотров 11214. Ответов 29
Метки нет (Все метки)

Скажите пожалуйста! Почему, в данной программе у меня не работает оператор Continue.Программа должна умножать введённые числа игнорируя нули. Вот исходник:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
  setlocale(0,"");
int i = 0, value = 0, product = 1;
for(i = 1; i<=10; i++)
{
    cout<<"Введите целое число: ";
    cin>>value;
    if(value == 1)
        continue;
    product*=value;
}
    cout<<"Произведение (игнорируя нули): "<<product
        <<endl;
 
cin.get();
cin.ignore();
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.07.2009, 10:22
Ответы с готовыми решениями:

Оператор continue
int main() { setlocale(LC_ALL, &quot;Russian&quot;); int r; cout &lt;&lt; &quot;Введите кол-во элементов массива...

Оператор continue
void drawCircle(int x0, int y0, int radius) { int x = 0; int y = radius; ...

Оператор continue
Прошу прощения за глупый вопрос. Пишу курсовую, голова уже совсем не работает. for...

Оператор continue.
Помогите:Вывести нечетные числа от 0 до 100, используя оператор continue.

29
Эксперт С++
3055 / 1397 / 421
Регистрация: 19.01.2009
Сообщений: 3,760
19.07.2009, 10:50 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
  setlocale(0,"");
  int i = 0, value = 0, product = 1;
  for(i = 1; i<=10; i++)
  {
    cout<<"Введите целое число: ";
    cin>>value;
 
    if(value > 0)
        product*=value;
  }
  cout<<"Произведение (игнорируя нули): "<<product<<endl;
  cin.get();
  cin.ignore();
  return 0;
}
0
3072 / 2393 / 255
Регистрация: 11.03.2009
Сообщений: 5,444
19.07.2009, 13:15 3
Что бы игнорировать нули надо писать
C++
1
2
if(value == 0)
   continue;
0
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 16:19  [ТС] 4
Попробывал так, вроде всё работает, но как мне это сделать используя оператор Continue


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
  setlocale(0,"");
  int i = 0, value = 0, product = 1;
  for(i = 1; i<=10; i++)
  {
        cout<<"Введите целое число: ";
        cin>>value;
 
        if(value > 0)
                product*=value;
        else break;
        
  }
  cout<<"Произведение (игнорируя нули): "<<product<<endl;
  cin.get();
  cin.ignore();
  return 0;
}
Поробывал с Continue так, но не выходит.

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
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
  setlocale(0,"");
  int i = 0, value = 0, product = 1;
  for(i = 1; i<=10; i++)
  {
        cout<<"Введите целое число: ";
        cin>>value;
 
        if(value == 0)
            continue;
                product*=value;
 
        
  }
  cout<<"Произведение (игнорируя нули): "<<product<<endl;
  cin.get();
  cin.ignore();
  return 0;
}
0
Evg
Эксперт CАвтор FAQ
21117 / 8133 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
19.07.2009, 16:24 5
С виду написано правильно. Что конкретно не работает?
0
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 16:30  [ТС] 6
Всё, проверил,вроде всё правильно написал. Не скажите, какой смысл заключается в операторе Continue,просто его сейчас читаю в книге, тоесть, переход к тому же циклу снова. Если что не так, поправьте меня.
0
Evg
Эксперт CАвтор FAQ
21117 / 8133 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
19.07.2009, 16:39 7
continue грубо говоря означает переход на конец цикла. Т.е.

C
1
2
3
4
5
6
7
8
9
for(i = 1; i<=10; i++)
{
  <код>
 
  if(value == 0)
    continue;
 
  <код>
}
по своему действию эквивалентно

C
1
2
3
4
5
6
7
8
9
10
11
for(i = 1; i<=10; i++)
{
  <код>
 
  if(value == 0)
    goto L;
 
  <код>
 
L:; // <-- метка в конце тела цикла
}
2
Почетный модератор
7262 / 2538 / 256
Регистрация: 29.07.2006
Сообщений: 13,450
19.07.2009, 16:57 8
Golovastik, не к тому же циклу снова, а переход на следующую итерацию цикла.
1
Evg
Эксперт CАвтор FAQ
21117 / 8133 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
19.07.2009, 17:08 9
Цитата Сообщение от Vourhey Посмотреть сообщение
Golovastik, не к тому же циклу снова, а переход на следующую итерацию цикла.
Если она (следующая итерация) есть
0
Почетный модератор
7262 / 2538 / 256
Регистрация: 29.07.2006
Сообщений: 13,450
19.07.2009, 17:12 10
Evg, на итерации и будет проверено. Она будет. Просто после очередной проверки в итерации, код может вйти из нее.
0
Evg
Эксперт CАвтор FAQ
21117 / 8133 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
19.07.2009, 17:56 11
Цитата Сообщение от Vourhey Посмотреть сообщение
Evg, на итерации и будет проверено. Она будет. Просто после очередной проверки в итерации, код может вйти из нее.
Ты не мне объясняй, я знаю. Товарищ не знает
0
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 20:50  [ТС] 12
Ясно,тоесть оператор Continue, даёт возможность перейти к следующей итерации, того же цикла. Есть ещё один вопрос. Вы не скажете,как в данном коде,что ниже, сделать такое. Когда, я 10 раз ввёл разные числа,включая нули, затем, после 10 числа, и нажатия клавиши ENTER , программа выдала произведение. Как мне сделать так, чтоб программа выдала сообщение после результата, "Желаете ли вы повторить процедуру ещё раз, если нет, тогда выйти из программы, если нажато, что-нибудь другое, тогда всё сначала подсчитывать, по 2-му кругу. Заранее благодарен. Я оппробывал так,но что-то не выходит.

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
27
28
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
  int chislo, proizvedenie = 1;
  char mama;
  setlocale(0,"");
  
  for(int i = 0; i<10; i++)
  {
  cout<<"Введите пожадуйста число -> ";
  cin>>chislo;
  if(chislo == 0)
      continue;
  proizvedenie*=chislo;
  }
  
  cout<<"Ещё раз не желаете ввести?\n\n\t----> ";
  mama = _getch();
  if((mama =='n') || (mama == 'N'))
      break;
  cout<<endl<<"Произведение чисел,игнорируя нули = "<<proizvedenie;
  cin.ignore();
  cin.get();
  return 0;
}
0
Почетный модератор
7262 / 2538 / 256
Регистрация: 29.07.2006
Сообщений: 13,450
19.07.2009, 21:20 13
Я, конечно, не знаю, но на месте компиляторы выдал бы тут:
break;
ошибку, так как, вызов не в цикле происходит. тебе нужно твой цикл for, твой вопрос и сообщение посместить в еще один бесконечный цикл. Подумай сам как. Это просто.
0
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 21:27  [ТС] 14
Попробывал так, но результата не вижу. ПОсле подсчёта, завершается и всё, и даже не выводит сообщение,что, хочу ли я продолжить ещё раз.
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
27
28
29
30
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
  int chislo, proizvedenie = 1;
  char mama;
  setlocale(0,"");
  
  do
  {
  for(int i = 0; i<10; i++)
  {
  cout<<"Введите пожадуйста число -> ";
  cin>>chislo;
  if(chislo == 0)
      continue;
  proizvedenie*=chislo;
  }
  
  cout<<"Ещё раз не желаете ввести?\n\n\t----> ";
  mama = _getch();
  }while ((mama =='n') || (mama == 'N'))
      break;
  cout<<endl<<"Произведение чисел,игнорируя нули = "<<proizvedenie;
  cin.ignore();
  cin.get();
  return 0;
}
0
Почетный модератор
7262 / 2538 / 256
Регистрация: 29.07.2006
Сообщений: 13,450
19.07.2009, 21:35 15
ты куда брейк засандалил? почему он у тебя вне цикла? Зачем он тебе нужен?
0
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 21:39  [ТС] 16
Я попробывал убрать break,(26 строку) и перед ним поставить точку с запятой, но тоже не работает.
0
Почетный модератор
7262 / 2538 / 256
Регистрация: 29.07.2006
Сообщений: 13,450
19.07.2009, 21:49 17
Все там должно работать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
do
    {
        for(int i = 0; i<3; i++)
        {
            cout<<"Введите пожадуйста число -> ";
            cin>>chislo;
            if(chislo == 0)
                continue;
            proizvedenie*=chislo;
        }
 
        cout<<endl<<"Произведение чисел,игнорируя нули = "<<proizvedenie;
        cout<<"Продолжить?\n\n\t----> ";
        cin.get();
        cin.get(mama);
    }
    while(mama != 'n');
Добавлено через 2 минуты 54 секунды
А чтобы работали твои два условия, подумай, почему ты написал || Почему там "или"? Соответственно, поправь свой код для 'N' так, чтобы он заработал. И, блин, никаких там брейков вне цикла не нужно!
0
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 21:51  [ТС] 18
Вот так работает, но дело в том,что когда идёт по 2-ому кругу подсчёт, уже считает неправильно, а за первым разом всё нормально.

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
27
28
29
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
  int chislo, proizvedenie = 1;
  char mama;
  setlocale(0,"");
  
 do
    {
        for(int i = 0; i<3; i++)
        {
            cout<<"Введите пожадуйста число -> ";
            cin>>chislo;
            if(chislo == 0)
                continue;
            proizvedenie*=chislo;
        }
 
        cout<<endl<<"Произведение чисел,игнорируя нули = "<<proizvedenie<<endl;
        cout<<"Продолжить?\n\n\t----> ";
        cin.get();
        cin.get(mama);
    }
    while(mama != 'n'); 
 
}
0
Почетный модератор
7262 / 2538 / 256
Регистрация: 29.07.2006
Сообщений: 13,450
19.07.2009, 21:55 19
Golovastik, еще бы он правильный считал. Значение переменной proizvedenie у тебя не меняется же
0
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 21:56  [ТС] 20
Обнулить надо наверное. Сейчас попробую. Ещё, может как-то туда втулить mama = _getch() чтоб, когда я введу за вторым разом символ, он не отображался, а то как-то не очень красиво получается, и ещё прикол, если я введу, несколько символов, произойдёт бесконечноый цикл.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.07.2009, 21:56

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Оператор continue в цикле for
Почему цифра &quot;1&quot; выводится два раза? Разве continue не предполагает пропуск всего оставшегося кода...

как задействовать оператор continue?
Написал программу для демонстрации работы оператора continue. Компилятор ругается, пишет что...

Почему оператор continue выводит наверх цикла?
Всем привет! Начинаю осваивать программирование, написал вот такую программу для вычисления...

удаление continue
У Дейтлов есть задача: Что здесь имеется в виду под структурированным эквивалентом?

Инструкция if(.) continue
Объясните пожалуйста как работает эта инструкция на таком примере: #include &lt;bits/stdc++.h&gt;...

If else statement (continue)
Простите - не пойму как форматировать код, копируемый с (С++). Всё исправлено - досихпор какие -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.