奇怪的循环情况,不知道是什么导致它

时间:2013-02-06 01:15:41

标签: c++ loops infinite

对某些代码有些麻烦,我无法深究它。这段代码:

int main()
{
int choice;

while (choice != -1)
{
      system("cls");
      std::cout << "Main Menu: " << std::endl
                << " 1. Encode." << std::endl
                << " 2. Decode." << std::endl
                << "-1 to exit." << std::endl;

      std::cin >> choice;

      switch (choice)
      {
             case 1:
                  encode();
                  break;
             case 2:
                  decode();
                  break;
             case -1:
                  break;
      }
}

getchar();
return 0;

}

void encode()
{
 std::string plainText;
 std::string encText = "Test";

 std::cout << "Enter text to be encrypted.\n";

 getline(std::cin, plainText);

 for (int x = 0; x < plainText.length(); x++)
 {
     //encText += plainText.substr(x, x + 1);
 }

 std::cout << encText;
 getchar();

 return;
}

如果我输入&#39; 1&#39;在第一个cin&gt;&gt;选择,我进入encode(),一旦进入,输入任何文本会导致程序返回到while,执行系统(&#34; cls&#34;),然后再跳回到&#34;输入文本要加密。&#34; down in encode()。

有任何帮助吗?我一无所知。

1 个答案:

答案 0 :(得分:1)

如果您想在whileencode()之后退出decode()循环,则必须保持while的状态。您可以通过在函数调用后简单地将choice设置为-1来执行此操作:

         case 1:
              encode();
              choice = -1;
              break;
         case 2:
              decode();
              choice = -1;
              break;

您知道,return末尾的encode()会导致encode()功能完成,而不是main。那行代码实际上什么也没做;因为它之后什么也没有,无论如何都会发生。