C ++ Хотя цикл завершается, хотя условия не выполняются - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу, чтобы программа продолжала запрашивать значения для выполнения вычислений до тех пор, пока флаг не станет истинным, тогда программа должна остановиться, но она выполняется только один раз.Я не знаю, правильно ли я использую char или есть ли лучший способ делать эти типы циклов while с флагами.Любая помощь будет отличной. [Введите описание изображения здесь] [1]

int main()
{
    displayMenu();
    bool flag = false;
    while(!flag)
    {
        int choice = 0; int val1 = 0; int val2 = 0; int ans = 0;
        cout << "Enter your choice (1-5): ";
        cin >> choice;
        cout << "\nEnter integer 1: ";
        cin >> val1;
        cout << "\nEnter integer 2: ";
        cin >> val2;
        if(choice < 0 || choice > 5)
        {
            cout << "\nEnter a choice between 1-5: ";
            cin >> choice;
        }
        if (choice == 1)
        {
          ans = Add(val1,val2);
          cout << "\nResult: " << ans << endl;
        }
        if (choice == 2)
        {
          ans = Subtract(val1,val2);
          cout << "\nResult: " << ans << endl;
        }
        if (choice == 3)
        {
          ans = Multiply(val1,val2);
          cout << "\nResult: " << ans << endl;
        }
        if (choice == 4)
        {
          ans = Divide(val1,val2);
          cout << "\nResult: " << ans << endl;
        }
        if (choice == 5)
        {
          ans = Modulus(val1,val2);
          cout << "\nResult: " << ans << endl;
        }
        char c_flag[] = "n";
        cout << "Press Y or y to continue: ";
        cin >> c_flag;
        if(c_flag == "y" || c_flag == "Y")
        {
            flag = false;
        }
        else
        {
            flag = true;
        }
    }
    return 0;
}

1 Ответ

0 голосов
/ 18 сентября 2018

При типе данных char c_flag[] условие c_flag == "y", скорее всего, никогда не будет выполнено, поскольку вы сравниваете два (разных) указателя значений, а не их содержимое.

Использование std::string c_flag вместо этого, и, по крайней мере, ваши условия должны работать так, как ожидается.

Вы также можете написать

char c_flag[] = "y";
...
if (strcmp(c_flag,"y")==0) ...

, но я бы предпочел вариант std::string по следующей причине: с char c_flag[] = "y", вы выделяете массив размером 2 (включая символ завершения строки);С cin >> c_flag, если вы введете более одного символа, вы превысите длину массива и получите неопределенное поведение.С std::string, напротив, переменная будет «расти» при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...