Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
Sinkha
3 / 3 / 2
Регистрация: 04.07.2015
Сообщений: 187
Завершенные тесты: 1
1

Перезапуск программы без оператора GOTO

14.09.2015, 23:29. Просмотров 442. Ответов 12
Метки нет (Все метки)

Пусть имеется данный код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
int main(){
 
a: ;
 
int a, b, c;
 
a = 4;
 
b = 5;
 
c = 12;
 
printf("#d", a + b + c);
 
getchar();
 
goto a;
 
}
Как убрать оператор GOTO, чтобы программа перезапускалась? У меня код размером гораздо больше, но мне нужна сама механика перезапуска.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2015, 23:29
Ответы с готовыми решениями:

Верно ли утверждение: « действие оператора continue; в приведенных ниже примерах эквивалентно действию оператора goto next; ».
Помогите пожалуйста ответить на вопрос,если можно с примером;Верно ли утверждение: « действие...

Необходимо избавиться от оператора goto
#include &lt;CONIO.H&gt; #include &lt;STDIO.H&gt; #include &lt;CTYPE.H&gt; #define STARTX 10 #define STARTY 2...

Как избежать использование оператора goto
во всех книжках по си пишут, что лучше метки и goto не использовать. типа плохой тон. и так все...

Как избежать использования оператора goto?
typedef struct BOOK { char *name; } book; int main() { FILE *fp; char *fname =...

Сделать без goto
#include&lt;stdio.h&gt; int main(){ int m=10, n=0; char snum; leb: printf(&quot;Enter a number: &quot;);...

12
IrineK
Заблокирован
14.09.2015, 23:41 2
Цитата Сообщение от Sinkha Посмотреть сообщение
Как убрать оператор GOTO, чтобы программа перезапускалась?
То, что делается на GOTO, может быть сделано в цикле.

printf у вас дивный какой-та - не нужно d решетки, процентик нарисуйте.
1
Sinkha
3 / 3 / 2
Регистрация: 04.07.2015
Сообщений: 187
Завершенные тесты: 1
15.09.2015, 00:31  [ТС] 3
IrineK, Ага спасибо. Значит нельзя без цикла. А принтф дивный из-за того, что я писал просто код для примера)
0
Вованя
149 / 145 / 65
Регистрация: 20.02.2014
Сообщений: 531
Завершенные тесты: 1
15.09.2015, 01:17 4
Цитата Сообщение от Sinkha Посмотреть сообщение
Значит нельзя без цикла.
Ну можно рекурсивно вызывать main, например.
0
15.09.2015, 01:17
Sinkha
3 / 3 / 2
Регистрация: 04.07.2015
Сообщений: 187
Завершенные тесты: 1
15.09.2015, 03:35  [ТС] 5
Вованя, А это не приведет к созданию большого числа всяких переменных?
0
HighPredator
5699 / 2023 / 723
Регистрация: 10.12.2010
Сообщений: 5,804
Записей в блоге: 3
15.09.2015, 11:06 6
Цитата Сообщение от Вованя Посмотреть сообщение
Ну можно рекурсивно вызывать main, например.
Нельзя.
0
Catstail
Модератор
24489 / 12418 / 2260
Регистрация: 12.02.2012
Сообщений: 20,163
15.09.2015, 11:13 7
Цитата Сообщение от HighPredator Посмотреть сообщение
Нельзя.
- можно не явно, а через API-функцию создания нового процесса.
0
Вованя
149 / 145 / 65
Регистрация: 20.02.2014
Сообщений: 531
Завершенные тесты: 1
15.09.2015, 13:02 8
Цитата Сообщение от HighPredator Посмотреть сообщение
Нельзя.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int 
main(int argc, char *argv[])
{
    int a = 5, b = 5, c = 0;
 
    printf("%d\n", a + b + c);
    
    if(argc++ < 10) {
        main(argc, argv);
    }
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Sinkha Посмотреть сообщение
А это не приведет к созданию большого числа всяких переменных?
Как и в любом другом рекурсивном вызове.
0
Kerry_Jr
Эксперт PHP
2213 / 2009 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
15.09.2015, 13:09 9
Цитата Сообщение от Вованя Посмотреть сообщение
C
1
2
3
if(argc++ < 10) {
    main(argc, argv);
}
Это ж где такому учат?
0
HighPredator
5699 / 2023 / 723
Регистрация: 10.12.2010
Сообщений: 5,804
Записей в блоге: 3
15.09.2015, 13:35 10
Вованя, и что? Ну сделали то, что запрещено стандартом, думаете это норм?
0
Вованя
149 / 145 / 65
Регистрация: 20.02.2014
Сообщений: 531
Завершенные тесты: 1
15.09.2015, 14:13 11
Цитата Сообщение от HighPredator Посмотреть сообщение
Ну сделали то, что запрещено стандартом, думаете это норм?
Ну можно же.
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10492 / 6201 / 1558
Регистрация: 25.07.2009
Сообщений: 11,806
15.09.2015, 18:58 12
Цитата Сообщение от HighPredator Посмотреть сообщение
Ну сделали то, что запрещено стандартом
Это каким и в каком разделе? В Committee Draft - April 12, 2011 нашёл только
6.5.2.2.11 Recursive function calls shall be permitted, both directly and indirectly through any chain
of other functions.
Вы с С++ точно не перепутали?
1
HighPredator
5699 / 2023 / 723
Регистрация: 10.12.2010
Сообщений: 5,804
Записей в блоге: 3
16.09.2015, 10:17 13
Хм, поискал и по ходу прямого запрета действительно нет. Забавно. Был неправ.
0
16.09.2015, 10:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2015, 10:17

Перезапуск программы до правильного ответа
Здравствуйте. Возможно ли реализовать следующее (см. картинку). 1. Если пользователь отвечает...

Как избавиться от goto без вреда для программы?
Как избавиться от goto, сохранив при этом функционал программы? Чтобы программа работала точно так...

Превращение кода с goto в код без goto
Помогите переписать это код без goto и потери производительности.А то мне кажется написано...


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

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

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