Застрял на петле - PullRequest
       2

Застрял на петле

1 голос
/ 08 марта 2020

Я уже разместил этот вопрос , но ни один из ответов не был правильным, как только я реализовал предложенные мне предложения. Вот что мне нужно, чтобы это произошло.

Would you like to process all the records in the file? (y/n) w
Error - Please enter either y or n.
Would you like to process all the records in the file? (y/n) n
Enter number of records to process: two
XXXXXXXXXX Error-non numeric or negative value, try again
Enter number of records to process: -10
XXXXXXXXXX Error-non numeric or negative value, try again
Enter number of records to process: 0
XXXXXXXXXX Error-non numeric or negative value, try again
Enter number of records to process: 10
Maximum requested record count of 10 reached

Вот что у меня есть. Я не знаю, что я делаю неправильно.

#include <iostream>
#include <fstream>

using namespace std;

int main(){

  char a = 0;            //User chooses Y or N
  int ProcessAmount = 0; //Amount of times to process if not all

  cout << "Would you like to process all the records in the file? "
       << "(y/n) ";
  cin >> a;

  if (a == 'y')
  {
    cout << "Processed all records successfuly" << endl;
  }

  do
  {

    if (a == 'n')
    {
      cout << "Enter number of records to process: ";
      cin >> ProcessAmount;

      if (ProcessAmount <= 0 or cin.fail())
      {
        cout << "" << endl;
        cout << "XXXXXXXXX Error-non numeric or negative value";
        cout << "" << endl;
        cin >> ProcessAmount;
      }
      else if (ProcessAmount >= 0 or (!(cin.fail())))
        ;
      {
        cout << "Maximum requested record count of " << ProcessAmount;
        cout << " reached" << endl;
        break;
      }
    }
    else
      (cin.fail());
    {
      cin.clear();
      cin.ignore(40, '\n');
      cout << "Please try again" << endl;
      cout << "Would you like to process all the records in the file? "
           << "(y/n) ";
      cin >> a;
    }

  } while (a == 'n');

}

Ответы [ 2 ]

2 голосов
/ 08 марта 2020

Прежде всего, or - это то, что я не знал, работало в C ++, но в моем компиляторе g cc оно работает нормально, так что спасибо вам за это, я все же заменил его на || в своем ответе, хотя.

Кроме того, есть некоторые проблемы с последовательностью событий в вашем цикле do - while, попробуйте код ниже.

Живой пример здесь

do {
  if (a == 'y') {
    cout << "Processed all records successfuly" << endl;
    break;
  }
  if (a == 'n') {
    cout << "Enter number of records to process: ";
    cin >> ProcessAmount;

    if (ProcessAmount <= 0 || cin.fail()) {
      cout << "XXXXXXXXX Error-non numeric or negative value";
      cout << "" << endl;
    }
    else {
      cout << "Maximum requested record count of " << ProcessAmount;
      cout << " reached" << endl;
      break;
    }
    cin.clear();
    cin.ignore(40, '\n');
    continue;
  }

  cout << "Please try again" << endl;
  cout << "Would you like to process all the records in the file? "
       << "(y/n) ";
  cin >> a;

} while (a != 'y');
1 голос
/ 08 марта 2020

Прежде всего, значение a должно быть проверено, например:

cout << "Would you like to process all the records in the file? "
    << "(y/n) ";
cin >> a;
//validating a
while (a != 'n' && a != 'y'){
    cout << "Error - Please enter either y or n." << endl;
    cout << "Would you like to process all the records in the file? "
        << "(y/n) ";
    cin >> a;
} 

//...do things if a='n'

//...do thing if a='y'

, тогда вам следует прекратить беспокоиться о a, тогда вы можете делать что-то, если a = n или если a = y

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