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

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

14.09.2015, 23:29. Просмотров 594. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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 =...

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

printf у вас дивный какой-та - не нужно d решетки, процентик нарисуйте.
1
3 / 3 / 2
Регистрация: 04.07.2015
Сообщений: 187
15.09.2015, 00:31  [ТС] 3
IrineK, Ага спасибо. Значит нельзя без цикла. А принтф дивный из-за того, что я писал просто код для примера)
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 555
15.09.2015, 01:17 4
Цитата Сообщение от Sinkha Посмотреть сообщение
Значит нельзя без цикла.
Ну можно рекурсивно вызывать main, например.
0
3 / 3 / 2
Регистрация: 04.07.2015
Сообщений: 187
15.09.2015, 03:35  [ТС] 5
Вованя, А это не приведет к созданию большого числа всяких переменных?
0
5967 / 2094 / 736
Регистрация: 10.12.2010
Сообщений: 5,914
Записей в блоге: 3
15.09.2015, 11:06 6
Цитата Сообщение от Вованя Посмотреть сообщение
Ну можно рекурсивно вызывать main, например.
Нельзя.
0
Модератор
26278 / 13685 / 2603
Регистрация: 12.02.2012
Сообщений: 22,454
15.09.2015, 11:13 7
Цитата Сообщение от HighPredator Посмотреть сообщение
Нельзя.
- можно не явно, а через API-функцию создания нового процесса.
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 555
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
Эксперт PHP
2385 / 2142 / 989
Регистрация: 14.05.2014
Сообщений: 6,254
Записей в блоге: 1
15.09.2015, 13:09 9
Цитата Сообщение от Вованя Посмотреть сообщение
C
1
2
3
if(argc++ < 10) {
    main(argc, argv);
}
Это ж где такому учат?
0
5967 / 2094 / 736
Регистрация: 10.12.2010
Сообщений: 5,914
Записей в блоге: 3
15.09.2015, 13:35 10
Вованя, и что? Ну сделали то, что запрещено стандартом, думаете это норм?
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 555
15.09.2015, 14:13 11
Цитата Сообщение от HighPredator Посмотреть сообщение
Ну сделали то, что запрещено стандартом, думаете это норм?
Ну можно же.
0
Модератор
Эксперт JavaЭксперт CЭксперт С++
10797 / 6539 / 1611
Регистрация: 25.07.2009
Сообщений: 12,314
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
5967 / 2094 / 736
Регистрация: 10.12.2010
Сообщений: 5,914
Записей в блоге: 3
16.09.2015, 10:17 13
Хм, поискал и по ходу прямого запрета действительно нет. Забавно. Был неправ.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2015, 10:17

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

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

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

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

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


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

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

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