在' while'在C ++中循环

时间:2016-10-19 15:54:10

标签: c++ while-loop

我开始用C ++构建一个非常简单的计算器版本。我们的想法是只用两个数字执行基本操作,然后循环回来,这样用户就可以进行新的计算。

程序如下:

#include<iostream>
#include<string>
#include"mathOperations.h"
using namespace std;

int main()
{
  int x, y;
  string operation;
  string repeat = "y";

  while (repeat == "y" or "Y")
  {
    cout << "Welcome! This is a raw version of a calculator - only use two numbers." << endl;
    cin >> x >> operation >> y;

    if (operation == "+")
    {
      cout << "Result: " << add(x, y) << endl;
    }
    else if (operation == "-")
    {
      cout << "Result: " << subtract(x, y) << endl;
    }
    else if (operation == "*")
    {
      cout << "Result: " << multiply(x, y) << endl;
    }
    else if (operation == "/")
    {
      cout << "Result: " << divide(x, y) << endl;
    }
    else
    {
      cout << "This is not a valid sign. Please choose another one!" << endl;
    }

    cout << "Wanna go again? Type 'y' or 'n'." << endl;
    cin >> repeat;

    if (repeat == "n" or "N")
    {
      cout << "Alright, have a nice day!" << endl;
      break;
    }
  }
}

int add(int x, int y)
{
  return x + y;
}

int subtract(int x, int y)
{
  return x - y;
}

int multiply(int x, int y)
{
  return x * y;
}

int divide(int x, int y)
{
  return x / y;
}

注意:有一个&#39; mathOperations.h&#39;我在其中使用了所有函数的前向声明的文件。

问题是每当我输入“&#39; y&#39;为了使其循环,它只是输出以下&#39;如果&#39;声明并打破循环,程序结束。我无法弄清楚为什么会发生这种情况,因为&#39; if&#39;只有当我输入&#39; n&#39;。

时才会运行声明

2 个答案:

答案 0 :(得分:7)

repeat == "n" or "N"

评估为

(repeat == "n") || "N"

请参阅C++ operator precedence

第一个repeat == "n"评估为truefalse,具体取决于您的输入,但OR的第二个子句,即"N",总是评估为true因为它是一个字符串文字,衰减到非零const char*指针,而在C或C ++中,所有非零都被隐式转换为true。因此,您的OR子句始终为true,这意味着将始终执行if块。

如评论中所述,您需要

if(repeat == "n" || repeat == "N") {...}

与第一个while条件类似。

答案 1 :(得分:1)

好的代码!我尝试使用&#34; ||&#34;代替你的&#34;或&#34;在你的if语句中。可能想用C ++短路布尔值来刷新你的知识。