不能调用 int main 来重复程序 c++
Cant call int main to repeat program c++
出于某种原因,我的程序不允许我调用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);
}
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 程序崩溃并显示"std::out_of_range"错误
- 在C应用程序中运行C++(带有STL)函数
- 使用mongocxx驱动程序时包含头文件问题
- 如何在c++程序中找到函数的地址