Не могу вызвать int main, чтобы повторить программу c ++

0

По какой-то причине моя программа не позвонит мне на главную. Я пытаюсь повторить программу, поэтому я могу продолжать добавлять материал в основную часть, но он будет делать вид, что main is not there и пропустить его.

Heres мой код, ive отслеживал его по строкам и даже когда я вхожу в правильную информацию, которую он просто отказывается читать в int main(); Есть предположения?

edit: im the moron. Спасибо за помощь!

#include <iostream>

using namespace std;

,,

int main()
{
    // New OrderedList
    OrderedList OrderedList;//no constructor called - is head initialized to NULL?
    char repeat;

    int choice = 0, data;

    cout << "Choose from the following menu options,\n"
         << "1: Add an item\n"
         << "2: Search for an item\n"
         << "3: Delete an item\n"
         << "4: Display the list\n"
         << "5: Destroy the list\n";
    cin >> choice;

        if (choice <= 3)
    {
        cout << "\nPlease enter the item.";
        cin >> data; 
    }
    switch(choice)
    {
    case 1:
        OrderedList.Insert(data);
        break;
    case 2: 
        OrderedList.Search(data);
        break;
    case 3: 
        OrderedList.Delete(data);
        break;
    case 4:
        OrderedList.Print();
        break;
    case 5:
        //delete OrderedList; "no constructor called - is head initialized to NULL?"
        break;
    }

    cout << "Repeat Y/N?\n";
    cin >> repeat;

    if (repeat == 'y' || repeat == 'Y')
    int main();
    return 0;
}
  • 6
    (1) Вы не вызываете main, вы заявляете : int main(); <= объявление. (2) Вы никогда не должны вызывать main() . Вы должны создать другую функцию.
  • 0
    Удалите ключевое слово int при вызове main.
Показать ещё 2 комментария
Теги:
language-lawyer

4 ответа

4
Лучший ответ

Вы никогда не должны вызывать main функцию внутри приложения, вместо этого вы можете попробовать использовать во while цикла.

int main(){    
   char repeat = 'Y';

   while( repeat == 'y' || repeat == 'Y' )    
   {
      //do some stuff

      cout << "Repeat? Y/N" << endl;
      cin >> repeat;    
   }

   return 0; 
}

Удачи!

3

Вы просто не должны называть main() рекурсивно, на самом деле, вы не должны его вообще называть. Фактически, стандарт C++ запрещает вызов с использованием main в "потенциально оцениваемом выражении", см. §3.6.1.3 стандарта (как указывает @Captain Obvlious). main() - это функция запуска C++ вашей программы, вызывается библиотекой времени выполнения после выполнения всех других (возможных) инициализаций.

Если вы хотите повторить его в main(), просто используйте цикл while (или for).

PS: Кажется, что работает следующее:

Используйте статическую переменную как условие остановки и вызовите main() рекурсивно, однако я должен сказать, что я никогда не видел эту практику, и я бы не рекомендовал ее вообще. Просто испытал, что это работает:

#include <iostream>
using namespace std;

// calling main() 10 times, recursively
int main() {
    static int i = 10; 
    cout << "Hello, World!" << endl; 

    i--;
    if(i>0)
        main();
}

Однако, если вы компилируете с -pedantic или -pedantic-errors, вы получите предупреждение/ошибку соответственно, заявив, что вы не должны/не можете вызвать main();

  • 0
    Ну, на самом деле вы можете вызвать main в нашем коде. Хотя, это не рекомендуется =)
  • 0
    Конечно, вы можете создать другую функцию, такую как 'int mainAux (int argc, char ** argv)', переместить туда весь свой код и затем вызвать эту функцию из main () (или из mainAux () ) так часто, как вам нравится.
Показать ещё 14 комментариев
2

Если вы измените строку

int main();

(который является объявлением функции)

main();

который будет вызовом функции, он, вероятно, сработает. Однако было бы лучше обернуть содержимое основного в цикле.

EDIT: Я только что проверил стандарты, и, что интересно, рекурсивные призывы к main являются незаконными только в C++. Я нахожу это удивительным.

EDIT 2: О, вопрос помечен C++. В этом случае вам запрещено вызова main рекурсивно! Демоны выйдут из вашего носа и еще много чего.

  • 0
    AFAIK C позволяет вам вызывать main независимо от того, рекурсивно это или нет. Разрешено ли это в C или нет, не имеет значения, так как вопрос помечен C ++.
  • 0
    @CaptainObvlious только что проверил стандарт, вы правы, однако странно, что g ++ не выдает хотя бы предупреждения, программа компилируется (и работает) просто отлично
Показать ещё 3 комментария
1

Не вызывайте main. Вместо этого используйте следующий 1 вкладыш

int main(int argc, char* argv[]) { 
   return (myMain(argc, char* argv[]);) 
}

использовать свой собственный главный... который можно назвать рекурсивно.

int myMain(int argc, char* argv[]) 
{
   // what ever you want, including recursion, 
   // but do not call what you are using for "int main(int, char**)"
}

Однако теперь вы должны уметь видеть, что "основное" имеет особое значение для всех ваших сверстников, поэтому есть только путаница в использовании любых вариантов "основной".

Пример: в моем файле "dumy142.cc" я предпочитаю использовать (несколько) более значимое имя, например "int t142 (int argc, char * argv [])":

int main(int argc, char* argv[]) {
   return(t142(arc, argv);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню