gpt4 book ai didi

c++ - Switch 语句 C++ 的问题

转载 作者:太空宇宙 更新时间:2023-11-04 16:18:27 25 4
gpt4 key购买 nike

我必须为我的算法类编写一个红黑树,然后编写一个菜单用于插入、删除、搜索等...元素。所以我认为 Switch 语句是可行的方法,但是当它脱离 case 时,它​​总是直接转到 return 语句并结束程序,即使我没有输入“0”。

我已经连续工作了大约 24 小时,并为其中的最后 16 个小时编程,所以如果它有些愚蠢或者我没有很好地解释它,我深表歉意。

while ( true )
{
int userinput = NULL;
PrintMenu();
cin >> userinput;
cin.clear();
cin.ignore( 10000 , '\n' );
switch ( userinput )
{
case 0:
{
return 0;
}
case 1:
{
while (true )
{
cout << "Enter an integer to be entered into the Red Black Tree or any letter to exit:\n";
if ( !(cin >> userinput) )
break;
cin.clear();
cin.ignore( 10000, '\n' );
data.Insert( userinput );
data.PrintInOrder();
}
}
case 2:
{
while (true )
{
cout << "WARNING : This mode allows entering of duplicate numbers.\n";
cout << "Enter an integer to be entered into the Red Black Tree or any letter to exit:\n";
if ( !(cin >> userinput) )
break;
cin.clear();
cin.ignore( 10000, '\n' );
data.Insert( userinput );
data.PrintInOrder();
}
}
case 3:
{
while (true )
{
cout << "Enter an integer to search the Red Black Tree for or any letter to exit:\n";
if ( !(cin >> userinput) )
break;
cin.clear();
cin.ignore( 10000, '\n' );
data.Search( userinput );
}
}
case 4:
{
while (true )
{
cout << "Enter an integer to be deleted from the Red Black Tree or any letter to exit:\n";
if ( !(cin >> userinput) )
break;
cin.clear();
cin.ignore( 10000, '\n' );
data.Delete( userinput );
data.PrintInOrder();
}
}
case 5:
{
while (true )
{
cout << "WARNING : This mode deletes all copies of an integer.\n";
cout << "Enter an integer to delete from the Red Black Tree or any letter to exit:\n";
if ( !(cin >> userinput) )
break;
cin.clear();
cin.ignore( 10000, '\n' );
data.DeleteAll( userinput );
data.PrintInOrder();
}
}
case 6:
data.PrintInOrder();
break;
case 7:
{
cout << "This Function tests if the tree passes all 5 Criteria of a Red Black Tree.\n";
data.IsRBT();
cout << "Test Finished, if you see no Violations then it passed. Press any letter to exit.\n";
if ( !(cin >> userinput) )
break;
}
}
system("CLS");
data.PrintInOrder();
}

最佳答案

案例之间缺少 break 语句,这意味着如果案例 1 被执行,那么案例 23456 也被执行。

循环内的break 语句只跳出循环,最内层的循环也不跳出任何其他循环。如果你想跳出外循环,你必须有例如一些由外循环检查的状态变量。喜欢

bool go_on = true;
while (go_on)
{
// Some code...

switch (some_condition)
{
case 1:
while (true)
{
if (some_other_condition)
{
go_on = false; // Tell outer loop to stop
break; // Break out of inner loop
}
}
break; // End the "case"

// More cases...
}
}

此外,您在多个地方使用了很多通用代码,这不是一个好的设计模式。想一想当你想改变它时会发生什么,但忘记在一个地方改变它。

关于c++ - Switch 语句 C++ 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19930151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com