Застрял в бесконечной петле - PullRequest
0 голосов
/ 07 марта 2020

нуб программист здесь. Пройду первый урок по CS в колледже и сделаю первый пост здесь, так что извините, если информации, которую я предоставляю, недостаточно для продвинутого уровня.

Все еще пытаюсь выяснить циклы. Кажется, получилось, но как только внутри циклов есть циклы, или если внутри циклов есть операторы, меня сбивают с толку, и я не знаю, как действовать дальше. Для выполнения моего задания мне необходимо выполнить следующее:

Хотите обработать все записи в файле? (y / n) W Пожалуйста, введите y или n. Вы хотите обработать все записи в файле? (y / n) n Введите количество записей для обработки: две XXXXXXXXXX Ошибка-не число c или отрицательное значение, попробуйте еще раз Введите число записей для обработки: 10

Вот мой код:

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;

  do{

    bool notDone = true;

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

              if (cin.fail()){
                  cin.clear();
                  cin.ignore(40,'\n');
                  cout << "" << endl;
              }
              else{
                  notDone = false;  
              }
        }
      }else if(a != 'y' or a != 'n');
            cout <<"Please enter either y or n." << endl;

  }while( a != 'y');  

Ответы [ 3 ]

0 голосов
/ 07 марта 2020

Я думаю, что это ответ, который вы хотите в соответствии с вашим объяснением. Надеюсь, это полезно для вас.

int main(){

char a;             //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;
bool notDone = true;

  if(a  == 'n'){
    while(notDone){

          if (ProcessAmount==0){
            cout << "Enter records to process: ";
            cin >> ProcessAmount;
          }
          else{
              notDone = false;
              break;
          }
    }
  }else if(a == 'y'){
    cout <<"processing all the records" << endl;
  }else{
    cout << "please enter either n or y";
    cin >> a;
    }

  } 
0 голосов
/ 07 марта 2020

Вы просто убираете предложение y / n из вашего l oop, тогда «a» никогда не изменит его значение. Посмотрите на изменения, которые вы можете захотеть:

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

    bool notDone = true;

    if (a  == 'n') {
        //. . .
    } else if (a == 'y') {
        //You may want to do something when yes
    } else if (a != 'f')
              cout <<"Please enter either y/n or f." << endl;

} while( a != 'f')
0 голосов
/ 07 марта 2020

Большинство проблем объясняется в комментариях, вот как я бы это исправил:

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;

while (a != 'y') {

  bool notDone = true;

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

      if (cin.fail()){
          cin.clear();
          cin.ignore(40,'\n');
          cout << "" << endl;
      } else {
        notDone = false;
      }
    }
  } else if(a != 'y' or a != 'n') {
    cout <<"Please enter either y or n." << endl;
    cin >> a; // Need to get new input because old one is invalid.
  }

};

Также я не вижу, как используется notDone. Также я настоятельно рекомендую использовать правильные отступы, пробелы вокруг ключевых слов как while, for, if, else, поскольку это хороший стиль.

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