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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 77, средняя оценка - 4.90
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
#1

Оператор continue - C++

19.07.2009, 10:22. Просмотров 9525. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
2932 / 1276 / 235
Регистрация: 19.01.2009
Сообщений: 3,319
Завершенные тесты: 1
19.07.2009, 10:50     Оператор continue #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;
}
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
19.07.2009, 13:15     Оператор continue #3
Что бы игнорировать нули надо писать
C++
1
2
if(value == 0)
   continue;
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 16:19  [ТС]     Оператор continue #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;
}
Evg
Эксперт CАвтор FAQ
17288 / 5536 / 345
Регистрация: 30.03.2009
Сообщений: 15,064
Записей в блоге: 26
19.07.2009, 16:24     Оператор continue #5
С виду написано правильно. Что конкретно не работает?
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 16:30  [ТС]     Оператор continue #6
Всё, проверил,вроде всё правильно написал. Не скажите, какой смысл заключается в операторе Continue,просто его сейчас читаю в книге, тоесть, переход к тому же циклу снова. Если что не так, поправьте меня.
Evg
Эксперт CАвтор FAQ
17288 / 5536 / 345
Регистрация: 30.03.2009
Сообщений: 15,064
Записей в блоге: 26
19.07.2009, 16:39     Оператор continue #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:; // <-- метка в конце тела цикла
}
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
19.07.2009, 16:57     Оператор continue #8
Golovastik, не к тому же циклу снова, а переход на следующую итерацию цикла.
Evg
Эксперт CАвтор FAQ
17288 / 5536 / 345
Регистрация: 30.03.2009
Сообщений: 15,064
Записей в блоге: 26
19.07.2009, 17:08     Оператор continue #9
Цитата Сообщение от Vourhey Посмотреть сообщение
Golovastik, не к тому же циклу снова, а переход на следующую итерацию цикла.
Если она (следующая итерация) есть
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
19.07.2009, 17:12     Оператор continue #10
Evg, на итерации и будет проверено. Она будет. Просто после очередной проверки в итерации, код может вйти из нее.
Evg
Эксперт CАвтор FAQ
17288 / 5536 / 345
Регистрация: 30.03.2009
Сообщений: 15,064
Записей в блоге: 26
19.07.2009, 17:56     Оператор continue #11
Цитата Сообщение от Vourhey Посмотреть сообщение
Evg, на итерации и будет проверено. Она будет. Просто после очередной проверки в итерации, код может вйти из нее.
Ты не мне объясняй, я знаю. Товарищ не знает
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 20:50  [ТС]     Оператор continue #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;
}
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
19.07.2009, 21:20     Оператор continue #13
Я, конечно, не знаю, но на месте компиляторы выдал бы тут:
break;
ошибку, так как, вызов не в цикле происходит. тебе нужно твой цикл for, твой вопрос и сообщение посместить в еще один бесконечный цикл. Подумай сам как. Это просто.
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 21:27  [ТС]     Оператор continue #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;
}
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
19.07.2009, 21:35     Оператор continue #15
ты куда брейк засандалил? почему он у тебя вне цикла? Зачем он тебе нужен?
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 21:39  [ТС]     Оператор continue #16
Я попробывал убрать break,(26 строку) и перед ним поставить точку с запятой, но тоже не работает.
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
19.07.2009, 21:49     Оператор continue #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' так, чтобы он заработал. И, блин, никаких там брейков вне цикла не нужно!
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 21:51  [ТС]     Оператор continue #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'); 
 
}
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
19.07.2009, 21:55     Оператор continue #19
Golovastik, еще бы он правильный считал. Значение переменной proizvedenie у тебя не меняется же
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2009, 21:56     Оператор continue
Еще ссылки по теме:

C++ Почему не выполняется continue?
C++ Как опустить строчку "Press and key to continue' вниз?
Почему оператор continue выводит наверх цикла? C++
как задействовать оператор continue? C++
C++ Оператор continue

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

Или воспользуйтесь поиском по форуму:
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
19.07.2009, 21:56  [ТС]     Оператор continue #20
Обнулить надо наверное. Сейчас попробую. Ещё, может как-то туда втулить mama = _getch() чтоб, когда я введу за вторым разом символ, он не отображался, а то как-то не очень красиво получается, и ещё прикол, если я введу, несколько символов, произойдёт бесконечноый цикл.
Yandex
Объявления
19.07.2009, 21:56     Оператор continue
Закрытая тема Создать тему
Опции темы

Текущее время: 00:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru