使用while或do while退出循环

时间:2018-09-28 17:48:14

标签: c++ loops

这是用于学校

我正在使用与上一个项目相同的实现方式,在该项目中,我只是创建了一个终止变量,然后在读取该终止变量时退出了循环。但是,对于我编写的该程序,我的exit语句只是读入用户输入并继续该程序。我已经尝试了while循环和while循环。

这是我的程序


int main() {
  std::string input;
  std::string terminate = "end";
  std::transform(terminate.begin(), terminate.end(), terminate.begin(),::toupper); //Extra stuff makes it not case sensitive

  std::cout << "This program checks for a balanced expression" << std::endl << "Enter 'end' to end the program" << std::endl;

  while(input != terminate){
    std::cout << "Enter Expression: ";
    std::cin >> input;

    if(checkBalance(input))
      std::cout << input << " " << "is balanced" << std::endl;
    else
      std::cout << input << " " << "is not balanced" << std::endl;


    }

  return 0;
}

1 个答案:

答案 0 :(得分:1)

有两件事会中断代码的工作

std::transform(terminate.begin(), terminate.end(), terminate.begin(),::toupper); //Extra stuff makes it not case sensitive

首先是逻辑问题。您对预定义的字符串 terminate 执行操作,但不更改用户输入的字符串 input 。实际上,您可以替换

std::string terminate = "end";
std::transform(terminate.begin(), terminate.end(), terminate.begin(),::toupper); //Extra stuff makes it not case sensitive

一行

std::string terminate = "END";

接下来的事情是您在读取循环之前更改了行的大小写,因此它不能修改用户输入,它仅定义字符串的初始状态。 因此,需要修改字符串修改的位置目标

int main() {
  std::string input;
  // Replace two initial rows by one with the same result
  std::string terminate = "END";

  std::cout << "This program checks for a balanced expression" << std::endl << "Enter 'end' to end the program" << std::endl;

  while(input != terminate){
    std::cout << "Enter Expression: ";
    std::cin >> input;

    if(checkBalance(input))
      std::cout << input << " " << "is balanced" << std::endl;
    else
      std::cout << input << " " << "is not balanced" << std::endl;

    // Modify user input to upper case for possibility of successful check on next while loop 
    std::transform(input.begin(), input.end(), input.begin(),::toupper); //Extra stuff makes it not case sensitive

    }

  return 0;
}

我在 checkBalance(input)之后找到了 input 修改,因为我不确定它可以对 input 进行哪些修改。实际上, input 大小写转换的最逻辑位置是直接在读取字符串之后,即在

之后
std::cin >> input;

还有一个便条。您的初始代码应退出以输入 END (即大写)。