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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 64, средняя оценка - 4.61
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
#1

Как вернуться в начало программы??? - C++

10.10.2010, 14:58. Просмотров 10802. Ответов 27
Метки нет (Все метки)

Как сделать так, чтобы при наступления какого-либо условия программа прерывалась и начаналась заново???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2010, 14:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вернуться в начало программы??? (C++):

Вернуться в начало файла - C++
Нужно вернуться в начало, при чтении текстового файла fstream

Вернуться в определенное место программы - C++
Здравствуйте! Есть ли возможность в С++ выполнить возврат к определенному месту в коде. Например у меня есть набор команд (что то вроде...

Не могу вернуться к тексту программы - C++
Программа вобщем-то работает, но после выполнения компилятор (Borland C++ ) не возвращает к тексту программы как обычно. (если что коряво...

Пролетает cin, после того как goto возвращается в начало программы - C++
Мне нужно сделать программу, которая будет исключать варианты ввода не целых чисел. Если вводить целое, то все работает нормально, а если...

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

Как вернуться в главное меню! - C++
Всем привет!Я сделал простенькую программу,которая записывает что-то в файл и выводит то,что введено. Так вот я не могу сделать так,чтобы...

27
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.10.2010, 15:46  [ТС] #16
Вот в игре "21" Как сделать так, тобы при вводе суммы большей чем есть на счету, выходило сообщение, "столько денег нет", и игра начаналась заново.
С помощью 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
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
 
int koloda[13] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 11};
int karta() {return rand()%13;}
struct igr {
int kartas;
char znak;};
               struct igr kolod[13]=
               {
               {2, '2'},
               {3, '3'},
               {4, '4'},
               {5, '5'},
               {6, '6'},
               {7, '7'},
               {8, '8'},
               {9, '9'},
               {10, 'T'},
               {2, 'J'},
               {3, 'D'},
               {4, 'K'},
               {11, 'A'} } ;
 
 
int main()
{
    int igrok, komp, kart,c=0, h=10, baks,b=0;
    char  ans, buf;
 
    time_t t;
    srand((unsigned)time (&t));
while(1) {
    do
    { if(b!=0) printf("net stolko deneg");
    b=0;
     clrscr();
        printf("****************** Igra nachinaetsya... ***************\n\n");
        printf(" \n U vas %d baksov", h);
        printf(" \n Vvetite summu stavki");
        scanf("%d", &baks);
        if (baks>h) { b++; printf("\n net stolko babla"); continue;}
        komp=0;igrok=0;
          do
        {   c=0;
            kart=karta();
            printf("Vasha karta: %c ", kolod[kart].znak);
 
            if (kolod[kart].znak=='A') {
            printf("\n Kak '1' ? Da 'y', net 'n'");
            ans=getchar();
            buf=getchar();
            if (ans=='y') kolod[kart].kartas=1;}
            igrok+=kolod[kart].kartas;
            printf ("\tSumma = %d\n", igrok);
            if(igrok>21)
            {
                printf("U vas perebor\n ");
                break;
            }
 
            printf("vzyat eshe? ('y' - yes, 'n' - no) : ");
            ans = getchar();
            buf = getchar();
        } while(ans!='n');
 
        if(igrok <= 21)
        {
            printf("\nkarti komputera:");
            do
            {
                kart=karta();
                if (kolod[kart].znak=='A') c++;
                printf(" %c", kolod[kart].znak);
                komp+=kolod[kart].kartas;
 
            if(komp>21 && c>0) komp=komp-c*10;
            } while(komp<17)    ;
            printf("\t Summa = %d", komp);
            textcolor(YELLOW);
            if(igrok>komp) printf(" \npozdravlyem, vi vuugrali\n");
            if(igrok==komp) printf(" \nnichyia\n");
            if (igrok<komp && komp<=21)  printf(" \nti proigral\n");
            if(igrok<komp && komp>21) printf("\npobeda\n");
        }
        printf(" \n igrat eshe? ('y' - yes, 'n' - no) : ");
        ans = getchar();
        buf = getchar();
        if(ans=='n') break;
    } while(ans!='n');  }
 
     textcolor(GREEN);
    printf(" \n Spasibo za igru!!! \n ");
    getch();
}
Добавлено через 39 секунд
44я строчка
0
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
10.10.2010, 16:20 #17
continue в 44 строке работает для цикла do (который начинается со стр. 36). Делает всё правильно - переходит к следующей итерации этого цикла - т.е. начинает новую игру. Почему не выводится сообщение - потому что оно стирается clrscr(), вот и всё. Зачем в этой ситуации ещё и цикл while(1), не совсем как-то понятно.
1
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.10.2010, 16:29  [ТС] #18
принтф же до континуя стоит
0
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
10.10.2010, 16:35 #19
Ну да, последовательность получается такая : напечатать->перейти на новый шаг-> очистить экран. Т.е. печать выполняется, и тут же всё стирается. Поставьте вывод сообщения об ошибке после clrscr() чтоли.
0
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.10.2010, 17:02  [ТС] #20
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
 
int koloda[13] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 11};
int karta() {return rand()%13;}
struct igr {
int kartas;
char znak;};
               struct igr kolod[13]=
               {
               {2, '2'},
               {3, '3'},
               {4, '4'},
               {5, '5'},
               {6, '6'},
               {7, '7'},
               {8, '8'},
               {9, '9'},
               {10, 'T'},
               {2, 'J'},
               {3, 'D'},
               {4, 'K'},
               {11, 'A'} } ;
 
 
int main()
{
    int igrok, komp, kart,c=0, h=10, baks,b=0;
    char  ans, buf;
 
    time_t t;
    srand((unsigned)time (&t));
 
    do
    { clrscr(); if(b!=0) printf("\n Net stolko deneg\n\n ");
 
    b=0;
 
        printf("****************** Igra nachinaetsya... ***************\n\n");
        printf(" \n U vas %d baksov", h);
        printf(" \n Vvetite summu stavki : ");
        scanf("%d", &baks);
        if (baks>h) { b++; printf("\n net stolko babla"); continue;}
        komp=0;igrok=0;
          do
        {   c=0;
            kart=karta();
            printf("Vasha karta: %c ", kolod[kart].znak);
 
            if (kolod[kart].znak=='A') {
            printf("\n Kak '1' ? Da 'y', net 'n'");
            ans=getchar();
            buf=getchar();
            if (ans=='y') kolod[kart].kartas=1;}
            igrok+=kolod[kart].kartas;
            printf ("\tSumma = %d\n", igrok);
            if(igrok>21)
            {
                printf("U vas perebor\n ");
                break;
            }
 
            printf("vzyat eshe? ('y' - yes, 'n' - no) : ");
            ans = getchar();
            buf = getchar();
        } while(ans!='n');
 
        if(igrok <= 21)
        {
            printf("\nkarti komputera:");
            do
            {
                kart=karta();
                if (kolod[kart].znak=='A') c++;
                printf(" %c", kolod[kart].znak);
                komp+=kolod[kart].kartas;
 
            if(komp>21 && c>0) komp=komp-c*10;
            } while(komp<17)    ;
            printf("\t Summa = %d", komp);
            textcolor(YELLOW);
            if(igrok>komp) printf(" \npozdravlyem, vi vuugrali\n");
            if(igrok==komp) printf(" \nnichyia\n");
            if (igrok<komp && komp<=21)  printf(" \nti proigral\n");
            if(igrok<komp && komp>21) printf("\npobeda\n");
        }
        printf(" \n igrat eshe? ('y' - yes, 'n' - no) : ");
        ans = getchar();
        buf = getchar();
 
    } while(ans!='n');
 
     textcolor(GREEN);
    printf(" \n Spasibo za igru!!! \n ");
    getch();
}
объясните плиз, почему getchar() не работает должностным образом, после вставки континуя, хотя может даже и не из-за этого

Добавлено через 14 минут
http://data.cod.ru/70744
Вот видео-отчет посмотрите
0
Jupiter
Каратель
Эксперт С++
6558 / 3979 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.10.2010, 17:04 #21
getchar() ловит символ после нажатия Enter,если вы хотите чтоб реагировало на нажатие поставьте getch()
0
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.10.2010, 17:26  [ТС] #22
так у меня итак же после <Enter>

Добавлено через 16 минут
т.е. перед Enter
0
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
10.10.2010, 17:26 #23
Как я понял, неправильно реагирует на y/n? Но зачем тут:
C++
1
buf = getchar();
Попробуйте просто:
C++
1
2
fflush(stdin);
ans = getchar();
0
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.10.2010, 17:41  [ТС] #24
C
1
fflush(stdin);
что такое?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
10.10.2010, 17:46 #25
KamalovRadik, Очистка потока.
0
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.10.2010, 17:47  [ТС] #26
в смысле буфера?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
10.10.2010, 17:48 #27
KamalovRadik, stdin - поток ввода...
0
Raily
3 / 3 / 1
Регистрация: 31.01.2014
Сообщений: 34
01.02.2014, 15:36 #28
используй goto; поставь метку (место куда надо вернуться)и двуеточие,
а в месте откуда надо вернуться используй команду goto
0
01.02.2014, 15:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2014, 15:36
Привет! Вот еще темы с ответами:

Как вернуться обратно в выбор - C++
Есть код: #include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt; using namespace std; enum class Keys ...

Возвращение в начало программы из функции - C++
Здравствуйте, сегодня во время напписания программы возникла такая необходимость: нужно из функции vichis_oper вернуться в начало функции...

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

Как через goto вернуться назад, чтоб еще раз проверить функцию? - C++
ребят,подскажите пожалуйста,как мне через goto вернуться назад,чтоб еше раз проверить мою функцию? ...


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

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

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