【问题标题】:C++: my switch-case loop goes to the first caseC++:我的 switch-case 循环转到第一种情况
【发布时间】:2020-10-13 04:01:51
【问题描述】:

我是 C++ 新手,所以我很抱歉我缺乏知识。 无论如何,我正在尝试在完成一个案例后返回菜单。

当前正在使用 do-while 等待 bool "restart" 更改为 false。

do {
    switch (wahl) {
        case 1:
            std::cout << "Bitte geben Sie den Grundwert ein: ";
            std::cin.clear();
            std::cin >> grund_eingabe;
            std::cout << "\nBitte geben Sie den Prozentsatz (%) ein: ";
            std::cin.clear();
            std::cin >> przsatz_eingabe;
            std::cout << "Der Prozentwert lautet: " + std::to_string(prozentwert_berechnen(grund_eingabe, przsatz_eingabe)) + "\n";
            break;
            
        case 2:
            std::cout << "Bitte geben Sie den Grundwert (Gesamtanzahl) ein: ";
            std::cin.clear();
            std::cin >> grund_eingabe;
            std::cout << "\nBitte geben Sie den Prozentwert ein: ";
            std::cin.clear();
            std::cin >> przwert_eingabe;
            std::cout << "Der Prozentsatz lautet: " + std::to_string(prozentsatz_berechnen(grund_eingabe, przwert_eingabe)) + "\n";
            
            
        case 3:
            std::cout << "Bitte geben Sie den Prozentsatz (%) ein: ";
            std::cin.clear();
            std::cin >> przsatz_eingabe;
            std::cout << "\nBitte geben Sie den Prozentwert ein: ";
            std::cin.clear();
            std::cin >> przwert_eingabe;
            std::cout << "Der Grundwert lautet: " + std::to_string(grundwert_berechnen(przsatz_eingabe, przwert_eingabe)) + "\n";
            
        case 4:
            neustart = false;
            return 0;
        default:
            break;
    }
} while (neustart != false);

当用例 1 结束时,它会循环回到第 1 例而不是菜单。 我能得到一些指导吗? 谢谢!

【问题讨论】:

  • 如果wahl 没有改变,那么switch(wahl) 将始终转到相同的case
  • 循环前变量 wahl 的值是多少?变量 wahl 永远不会改变,至少在循环的开头或结尾有一个 std::cin 变量 wahl 以便切换有意义。
  • case 4,我可以清除控制台并再次显示菜单,并要求输入wahl吗?那不应该工作吗
  • 你应该在每次循环迭代中询问,否则你可能永远不会退出循环
  • 顺便说一句。如果你返回 0,你甚至不需要将 neustart 设置为 true...return 将退出循环以及它所在的函数

标签: c++ loops switch-statement do-while


【解决方案1】:

您将值 wahl 传递到 switch 语句中,但您从未尝试要求用户获取输入,因此永远不会被更改和循环。

你可以试试:

do {
    std::cout << "Enter an option: ";
    std::cin >> wahl;
    
    switch (wahl) {
    case 1:
        break;
    case 2:
        break;
    case 3:
        break;
    case 4:
        break;
    default:
        break;
    }
} while (neustart != false);

【讨论】:

    【解决方案2】:

    当用例 1 结束时,它会循环回到第 1 例而不是菜单。

    是的,这正是你所写的。当switch 完成和neustart != false 时,程序循环回到switch 而不更改wahl。如果要返回菜单,则必须将菜单包含在 do-while 循环中。

    【讨论】:

    • 工作就像一个魅力,我正要开始做循环等,但这样更简单,谢谢!
    • @Clark 我很高兴能帮上忙!如果我或其他任何人可以解决您的问题,如果您accepted 相应的答案(✓),那就太好了。另请参阅What should I do when someone answers my question?
    【解决方案3】:

    最简单的改变:

    do {
        std::cout << "Bitte wählen: ";
        std::cin >> wahl;
        switch (wahl) {
    

    【讨论】:

      【解决方案4】:

      因为您从未要求用户在循环开始后输入新值,所以每次循环重新启动时,wah1 的值始终是您在开始循环之前输入的最后一个值。

      do{
         std::cout<<"Enter another option:";
         std::cin>>wah1;
         switch(wah1){
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-13
        • 1970-01-01
        • 1970-01-01
        • 2011-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多