不能调用 int main 来重复程序 c++

Cant call int main to repeat program c++

本文关键字:程序 c++ 调用 int main 不能      更新时间:2023-10-16

出于某种原因,我的程序不允许我调用main。我试图让程序重复,这样我就可以继续将东西添加到 main 中,但它会假装 main 不存在并跳过它。

这是我的代码,我逐行跟踪它,即使我输入正确的信息,它也只是拒绝在 int main() 中读取;有什么想法吗?

编辑:我是个白痴。感谢您的帮助!

#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 itemn"
         << "2: Search for an itemn"
         << "3: Delete an itemn"
         << "4: Display the listn"
         << "5: Destroy the listn";
    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;
}

你永远不应该在应用程序中调用main函数,而是你可以尝试使用while循环。

int main(){    
   char repeat = 'Y';
   while( repeat == 'y' || repeat == 'Y' )    
   {
      //do some stuff
      cout << "Repeat? Y/N" << endl;
      cin >> repeat;    
   }
   return 0; 
}

祝你好运!

你只是不应该递归地调用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();

如果更改行

int main();

(这是一个函数声明)到

main();

这将是一个函数调用,它很可能会起作用。但是,最好将 main 的内容包装在一个循环中。

编辑:我刚刚检查了标准,有趣的是,对main的递归调用仅在C++是非法的。我觉得这很令人惊讶。

编辑2:哦,这个问题被标记为C++。在这种情况下,禁止您递归调用main!恶魔会从你的鼻子里出来什么的。

不要调用 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**)"
}

但是,现在您应该能够看到"main"对所有同行都具有特殊含义,因此在"main"上使用任何变体只会造成混淆。

示例:在我的文件"dumy142.cc"中,我更喜欢使用(有点)更有意义的名称,例如"int t142(int argc, char* argv[])":

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