Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
 Аватар для AHTOH33
0 / 0 / 0
Регистрация: 12.05.2017
Сообщений: 20

Можно ли вручную вызвать метод main()

11.07.2017, 18:08. Показов 4386. Ответов 23
Метки main (Все метки)

Студворк — интернет-сервис помощи студентам
у меня в книге по C++ написано, что метод main() является зарезервированным системой и что его невозможно вызвать вручнуюкак обычную функцию, но тем не менее код представленный ниже прекрасно компилируется и корректно работает, стандарт использую C++11, этот же стандарт является последним на момент написания книги, код представлен ниже
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <iostream>
#include <ctime>
#include <cstdlib>
 
bool checknum(int, char *);
bool checkwin(char *, char *);
int checkrightpos(char *, char *, int);
int checkrightdig(char *, char *, int);
bool checkinvalidinput(char *, int);
void setpause(float i);
 
bool first = true;
 
int main()
{
    std::srand(time(NULL));
    const int numsize = 5;
    char *number, *answer, *testanswer;
    int *rightdig, *rightpos, *attempts;
    number = new char[numsize];
    attempts = new int;
    for(int i = 0; i < numsize; i++){
        do
            number[i] = std::rand() % 10 + 48;
        while(i != 0 && checknum(i, number));
    }
    number[numsize - 1] = '\0';
    if(first)
        std::cout << "Hello, welcome to the Logic Game!\n";
    first = false;
    std::cout << "Number has generated.\nYou have 10 attempts, start!" << std::endl;
    std::cout << "Enter the number: ";
    rightdig = new int;
    rightpos = new int;
    answer = new char[numsize];
    testanswer = new char[100];
    *attempts = 10;
    while(std::cin.getline(testanswer,100)){
        for(int i = 0; i < numsize - 1; i++)
            answer[i] = testanswer[i];
        answer[numsize - 1] = '\0';
        if(checkinvalidinput(answer, numsize - 1)){
            std::cout << "Invalid input! Enter again: ";
            continue;
        }
        if(*attempts == 1)
            break;
        else
            (*attempts)--;
        if(checkwin(answer, number))
            break;
        *rightdig = checkrightdig(answer, number, numsize - 1);
        *rightpos = checkrightpos(answer, number, numsize - 1);
        std::cout << "You number is\t   " << answer <<". ";
        std::cout << *rightdig << " right numbers," << *rightpos << " in right position.\n";
        std::cout << *attempts << " attempts.\n";
        std::cout << "Enter again: ";
        continue;
    }
    if(*attempts == 1)
        std::cout << "You Lose! Right number is " << number << "!\n";
    else
        std::cout << "You won for " << 10 - *attempts << " attempts!" << std::endl;
    std::cout << "Wanna play again?(y/n): ";
    delete [] number;
    delete rightdig;
    delete rightpos;
    delete [] answer;
    delete [] testanswer;
    delete attempts;
    answer = new char[100];
    while(std::cin.getline(answer,100) && answer[0] != 'n' && answer[0] != 'N'){
        switch (answer[0]){
        case 'Y':
        case 'y':
            main();. dspdfn
        default:
            std::cout << "Incorrect input, enter again: ";
            continue;
        }
    }
    delete [] answer;
    std::cout << "Okay, bye!";
    setpause(1);
    return 0;
}
 
bool checknum(int j, char *num){
    bool outbool = false;
    for(int i = j - 1; i >= 0; i--){
        if(num[i] == num[j]){
            outbool = true;
            break;
        }
    }
    return outbool;
}
 
bool checkwin(char *answer, char *right){
    bool outbool = true;
    for(int i = 0; answer[i] != '\0'; i++){
        if(answer[i] != right[i])
            outbool = false;
    }
    return outbool;
}
 
bool checkinvalidinput(char *input, int inputsize){
    bool outbool = false;
    if(sizeof(input) > inputsize)
        outbool = true;
    else
        for(int i = 0; i < inputsize; i++)
            if(!isdigit(input[i])){
                outbool = true;
                break;
            }
    for(int i = 1; i < inputsize; i++){
        for(int j = i - 1; j < i; j++)
            if(input[j] == input[i]){
                outbool = true;
                break;
            }
        if(outbool)
            break;
    }
    return outbool;
}
 
int checkrightdig(char *answer, char *right, int numsize){
    int rightnums = 0;
    for(int i = numsize - 1; i >= 0; i--)
        for(int j = numsize - 1; j >= 0; j--)
            if(answer[i] == right[j]){
                rightnums++;
                break;
            }
    return rightnums;
}
 
int checkrightpos(char *answer, char *right, int numsize){
    int rightnums = 0;
    for(int i = 0; i < numsize; i++)
        if(answer[i] == right[i])
            rightnums++;
    return rightnums;
}
 
void setpause(float i){
clock_t sec = i * CLOCKS_PER_SEC;
clock_t secpause = clock();
while(clock() - secpause < sec);
}
Добавлено через 9 минут
Там строчка где main() символов нет после точки с запятой, это я слуцайно набил и не заметил уже на сайте.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.07.2017, 18:08
Ответы с готовыми решениями:

Можно ли из программы вызвать метод main()?
Прошу помощи! Ситуация следующая: я разрабатываю на Java под Android, в C не очень разбираюсь. Есть библиотека FFmpeg для работы с видео....

Как вызвать метод info в метод Main и с какими параметрами?
я новичок в C#, так что не судите строго.. Я не думаю что это кому-то покажется сложным, но у меня вызывает дикий ступор(( using...

Метод main и как им вызвать другой метод
Доброго всем времени суток. У меня возникла проблема. Вобщем дело такое. У меня есть тестовый класс Test, в котором существует 4 метода:...

23
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
12.07.2017, 08:49
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от AHTOH33 Посмотреть сообщение
Забавно, Я не настолько глуп, чтобы не знать с каким языком работаю
Имелось в виду, что диалект GNU++, который применяется по умолчанию в GCC, не является С++ в полной мере.

Из официальной документации: https://gcc.gnu.org/onlinedocs/gcc/Standards.html
By default, GCC also provides some additional extensions to the C++ language that on rare occasions conflict with the C++ standard. See Options Controlling C++ Dialect. Use of the -std options listed above disables these extensions where they they conflict with the C++ standard version selected. You may also select an extended version of the C++ language explicitly with -std=gnu++98 (for C++98 with GNU extensions), or -std=gnu++11 (for C++11 with GNU extensions), or -std=gnu++14 (for C++14 with GNU extensions), or -std=gnu++1z (for C++1z with GNU extensions).

The default, if no C++ language dialect options are given, is -std=gnu++14.
3
 Аватар для AHTOH33
0 / 0 / 0
Регистрация: 12.05.2017
Сообщений: 20
12.07.2017, 17:14  [ТС]
Если так, то понятно, спасибо за уточнение, но насколько я знаю у меня стоит -std=c++11
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,417
12.07.2017, 18:40
Цитата Сообщение от AHTOH33 Посмотреть сообщение
но насколько я знаю у меня стоит -std=c++11
Этого мало. Для того, чтобы заставить GCC выдавать (или стараться выдавать) требуемые спецификацией языка диагностические сообщения нужно еще как минимум указать -pedantic.
0
 Аватар для AHTOH33
0 / 0 / 0
Регистрация: 12.05.2017
Сообщений: 20
13.07.2017, 07:43  [ТС]
TheCalligrapher, спасибо, уже понял, и, как писал выше, уже указал это, и теперь программа не компилируется
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.07.2017, 07:43

Как вызвать метод в main()
Помогите решить задачу, а то из универа выгонят. Не могу понять, как в мэйне вызвать эту функцию class Program { ...

Reflection. Как вызвать конструктор и метод в Main'e?
Доброго всем времени суток. уже 2ой пытаюсь разобраться с reflection, перечитал кучу инфы, пересмотрел много примеров, но так и не смог...

Как вызвать в Main метод из другого класса?
Задачка на среднее арифметическое. Создал класс &quot;Array&quot;, в котором происходит заполнение массива числами, затем числа из массива и...

Из main вызвать две задачи, при этом сразу вернуть управление в main
Не нашел нигде.. гугл не помог (отчасти только). Вопрос такой, есть консольное приложение. Код main static void Main() { ...

Можно ли переименовать метод Main?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru