Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 19.10.2018
Сообщений: 27

Как сделать правильное возвращение к началу функции?

19.10.2018, 15:40. Показов 2910. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, сегодня у меня возник вопрос - как сделать правильное возвращение к началу функции, пытался искать, но мало что понял, честно говоря, потому что только начинаю программировать на С++.

Мне нужно сделать так, чтобы когда пользователя спрашивали по новой то он возвращался в почти что самое начало программы и вводил переменную заново. Но, работает все по другому. Пример:

Приветствую!
Введи первую переменную: -- 1
Введи знак операции: -- d
Доступны символы '+', '-' , '*', '/' !
По новой?(y/n) -- y
Введи знак операции: +
По новой?(y/n) -- y
Введи знак операции: +

и вот так он почему то циклируется..
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
using namespace std;
int x, y;
char ch,ch2;
 
void p()
{
    cout << "Сложение\n";
    system("pause");
}
void m()
{
    cout << "Вычитание\n";
    system("pause");
}
void mu()
{
    cout << "Умножение\n";
    system("pause");
}
void d()
{
    cout << "Деление\n";
    system("pause");
}
 
int main()
{
    setlocale(LC_ALL, "RUS");
    cout << "Приветствую!\n";
    cout << "Введи первую переменную: ";
    cin >> x;
    label:
    cout << "Введи знак операции: ";
    cin >> ch;
    if (ch != '+' || ch != '-' || ch != '*' || ch != '/') {
        system("cls");
        cout << "Доступны символы '+' ,'-' ,'*' , '/' !\n";
        cout << "По новой?(y/n)\n";
        cin >> ch2;
        if (ch2 == 'y') {
            system("cls");
            goto label;
        }
        if (ch2 == 'n') {
            system("cls");
            cout << "Тогда всего хорошего!\n";
            system("pause");
            return 0;
        }
    }
    cout << "Введи вторую переменную: ";
    cin >> y;
    if (ch == '+') {
        p();
    }
    if (ch == '-') {
        m();
    }
    if (ch == '*') {
        mu();
    }
    if (ch == '/') {
        d();
    }
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.10.2018, 15:40
Ответы с готовыми решениями:

RichEdit, возвращение к началу
Добрый день, уважаемые! Есть компонент RichEdit, в котором я формирую достаточно большой текст. По мере добавления строк...

Не правильное возвращение bool
bool isFirstLoad(char *PATH) { if(access(PATH, 0) == -1) { ofstream validFile; ...

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

8
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
19.10.2018, 15:47
Перенеси метку label: на две строки выше. Но вообще использование goto и меток для такой задачи считается дурным тоном. Почитай про циклы, способы выхода из цикла и про бесконечные циклы.
0
75 / 59 / 31
Регистрация: 20.03.2017
Сообщений: 351
19.10.2018, 15:49
savaznatnov, как вариант можно использовать цикл while
0
Заблокирован
19.10.2018, 16:10
Цитата Сообщение от TRam_ Посмотреть сообщение
дурным тоном.
это ещё почему?
0
Just Do It!
 Аватар для XLAT
4206 / 2663 / 655
Регистрация: 23.09.2014
Сообщений: 9,061
Записей в блоге: 3
19.10.2018, 17:15
Лучший ответ Сообщение было отмечено savaznatnov как решение

Решение

Цитата Сообщение от stu4ent2018 Посмотреть сообщение
это ещё почему?
Оператор goto делает код трудночитаемым, потому что, если управление программой может перескакивать с одного места в другое, то нельзя с уверенностью сказать в каком состоянии находится программа при выполнении конкретного участка кода. Основанные на goto программы не могут быть легко разбиты на составные части, потому что любая точка в коде может быть кротовой норой к любой другой части кода. В итоге такой код превращается во “все везде” и для понимания даже отдельной части кода, нужно уже разбираются во всей этой путанице, и в последствии это становится невозможным для больших программ. Это можно легко сравнить с миской спагетти, где извлечение даже одной макаронины включает в себя навигацию через большой клубок макарон. Вы не можете просто посмотреть в тарелку и понять какая макаронина с какой спутана, вместо этого приходится кропотливо распутывать весь клубок.
savaznatnov,
с сохранением авторской логики
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
using namespace std;
int x, y;
char ch,ch2;
 
void p()
{
    cout << "Сложение\n";
    system("pause");
}
void m()
{
    cout << "Вычитание\n";
    system("pause");
}
void mu()
{
    cout << "Умножение\n";
    system("pause");
}
void d()
{
    cout << "Деление\n";
    system("pause");
}
 
int main()
{
    setlocale(LC_ALL, "RUS");
    cout << "Приветствую!\n";
    cout << "Введи первую переменную: ";
    cin >> x;
    do
    {   system("cls");
        cout << "Введи знак операции: ";
        cin >> ch;
        if (ch != '+' || ch != '-' || ch != '*' || ch != '/')
        {
            system("cls");
            cout << "Доступны символы '+' ,'-' ,'*' , '/' !\n";
            cout << "По новой?(y/n)\n";
            cin >> ch2;
            
            if (ch2 == 'n')
            {   system("cls");
                cout << "Тогда всего хорошего!\n";
                system("pause");
                return 0;
            }
        }
    }while(ch2 == 'y');
    
    cout << "Введи вторую переменную: ";
    cin >> y;
    if (ch == '+') 
    {   p();
    }
    if (ch == '-')
    {   m();
    }
    if (ch == '*')
    {   mu();
    }
    if (ch == '/')
    {   d();
    }
    return 0;
}
1
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
19.10.2018, 17:18
Если можно не посылать, то лучше не посылать.
0
1 / 1 / 0
Регистрация: 19.10.2018
Сообщений: 27
20.10.2018, 18:22  [ТС]
XLAT
Попробовал сделать как ты, в итоге получилось вот так:

Приветствую!
Введи первую переменную: -- 2
Введи знак операции: -- *
Доступны символы '+' ,'-' ,'*' , '/' !
По новой?(y/n) -- y
Доступны символы '+' ,'-' ,'*' , '/' !
По новой?(y/n) -- y
и так впадает в цикл..
Но, если сделать вот так:
Приветствую!
Введи первую переменную: -- 2
Введи знак операции: -- d
Доступны символы '+' ,'-' ,'*' , '/' !
По новой?(y/n) -- y
Введи знак операции: -- *
Доступны символы '+' ,'-' ,'*' , '/' !
По новой?(y/n) -- d
Введи вторую переменную: -- 2
Умножение
то работает, но как то криво))
0
Just Do It!
 Аватар для XLAT
4206 / 2663 / 655
Регистрация: 23.09.2014
Сообщений: 9,061
Записей в блоге: 3
20.10.2018, 21:44
Лучший ответ Сообщение было отмечено savaznatnov как решение

Решение

Цитата Сообщение от savaznatnov Посмотреть сообщение
Попробовал сделать как ты, в итоге получилось вот так:
я преследовал в своем ответе выше ток одну задачу:
показать, как можно заменить оператор goto оператором do{...}while(...);
остальное делайте, как пожелаете.
1
1 / 1 / 0
Регистрация: 19.10.2018
Сообщений: 27
21.10.2018, 15:28  [ТС]
XLAT , все равно благодарю тебя! Возьму на заметку себе
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.10.2018, 15:28
Помогаю со студенческими работами здесь

Как сделать так чтобы программа выдавала приглашение к началу игры?
Помогите выдать приглашение к началу игры и задать определенное количество попыток в игре угадайка(угадывает компьютер)

Как вернуться к началу компиляции после выполнения какой либо функции?
В общем даже не знаю как сформулировать свой вопрос. как вернуться к началу компиляции после выполнения какой либо функции? допустим у...

Как сделать возвращение значений через return?
public tek_record() { int flag = 0; do { int g...

Возвращение функции(или как-то так)
Дано натуральное число N, проверить, простое оно или нет. Увеличить его значение на натуральное число M. Проверить, осталось ли оно простым...

Как сделать правильное opacity?
Мне нужно что б голубой фон на картинке был полупрозрачным. Все эти блоки я делал с помощью css и на синем блоке находятся у меня все...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru