Algorithms クラスの Red Black Tree を作成し、要素の挿入、削除、検索などに使用するメニューを作成する必要がありました。そこでSwitch文がいいのかと思ったのですが、ケースを抜けると「0」を入力していないのに必ずreturn文に直行してプログラムを終了してしまいます。
私は約 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();
}