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

Оператор continue

19.07.2009, 10:22. Просмотров 10224. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2009, 10:22
Ответы с готовыми решениями:

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

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

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

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

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

29
schdub
Эксперт С++
3038 / 1380 / 421
Регистрация: 19.01.2009
Сообщений: 3,685
Завершенные тесты: 1
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
kazak
3058 / 2379 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
19.07.2009, 13:15 3
Что бы игнорировать нули надо писать
C++
1
2
if(value == 0)
   continue;
0
Golovastik
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
19289 / 7148 / 528
Регистрация: 30.03.2009
Сообщений: 20,000
Записей в блоге: 30
19.07.2009, 16:24 5
С виду написано правильно. Что конкретно не работает?
0
Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 16:30  [ТС] 6
Всё, проверил,вроде всё правильно написал. Не скажите, какой смысл заключается в операторе Continue,просто его сейчас читаю в книге, тоесть, переход к тому же циклу снова. Если что не так, поправьте меня.
0
Evg
Эксперт CАвтор FAQ
19289 / 7148 / 528
Регистрация: 30.03.2009
Сообщений: 20,000
Записей в блоге: 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
Vourhey
Почетный модератор
6492 / 2267 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
19.07.2009, 16:57 8
Golovastik, не к тому же циклу снова, а переход на следующую итерацию цикла.
1
Evg
Эксперт CАвтор FAQ
19289 / 7148 / 528
Регистрация: 30.03.2009
Сообщений: 20,000
Записей в блоге: 30
19.07.2009, 17:08 9
Цитата Сообщение от Vourhey Посмотреть сообщение
Golovastik, не к тому же циклу снова, а переход на следующую итерацию цикла.
Если она (следующая итерация) есть
0
Vourhey
Почетный модератор
6492 / 2267 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
19.07.2009, 17:12 10
Evg, на итерации и будет проверено. Она будет. Просто после очередной проверки в итерации, код может вйти из нее.
0
Evg
Эксперт CАвтор FAQ
19289 / 7148 / 528
Регистрация: 30.03.2009
Сообщений: 20,000
Записей в блоге: 30
19.07.2009, 17:56 11
Цитата Сообщение от Vourhey Посмотреть сообщение
Evg, на итерации и будет проверено. Она будет. Просто после очередной проверки в итерации, код может вйти из нее.
Ты не мне объясняй, я знаю. Товарищ не знает
0
Golovastik
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
Vourhey
Почетный модератор
6492 / 2267 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
19.07.2009, 21:20 13
Я, конечно, не знаю, но на месте компиляторы выдал бы тут:
break;
ошибку, так как, вызов не в цикле происходит. тебе нужно твой цикл for, твой вопрос и сообщение посместить в еще один бесконечный цикл. Подумай сам как. Это просто.
0
Golovastik
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
Vourhey
Почетный модератор
6492 / 2267 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
19.07.2009, 21:35 15
ты куда брейк засандалил? почему он у тебя вне цикла? Зачем он тебе нужен?
0
Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 21:39  [ТС] 16
Я попробывал убрать break,(26 строку) и перед ним поставить точку с запятой, но тоже не работает.
0
Vourhey
Почетный модератор
6492 / 2267 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
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
Golovastik
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
Vourhey
Почетный модератор
6492 / 2267 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
19.07.2009, 21:55 19
Golovastik, еще бы он правильный считал. Значение переменной proizvedenie у тебя не меняется же
0
Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 21:56  [ТС] 20
Обнулить надо наверное. Сейчас попробую. Ещё, может как-то туда втулить mama = _getch() чтоб, когда я введу за вторым разом символ, он не отображался, а то как-то не очень красиво получается, и ещё прикол, если я введу, несколько символов, произойдёт бесконечноый цикл.
0
19.07.2009, 21:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2009, 21:56

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

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

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


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

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

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