Почему мои два оператора cin не работают в конце программы? - PullRequest
0 голосов
/ 16 октября 2018

Я первый год в магистратуре.Сегодня в нашей лаборатории мы должны были отладить некоторый код и заставить его работать.Ниже приведен результат.

#include <iostream>

using namespace std;

int main() {

   int x = 3, y;
   char myanswer;
   int val= 1;
   int num;

   y = x;
   cout << "y is set to: " << y << endl;


   bool again = true;
   int ans;
   while (again) {
      cout << "Please input a number: ";
      cin >> y;
      if (x > y)
         cout << "X is greater than Y\n";

      else {
         cout << "X is less than Y" << endl;
         cout << "would you like to input another number?" << endl;
         cin >> ans;
         if (ans != 1)
            break;
      }
      cout << "would you like to input another number ?" << endl;
      cin >> ans;
      if (ans != 1)
         again = false;
   }
   for (x = 0; x < 10; x++)
      cout << x << endl;

   cout << "What number would you like to find the factorial for? " << endl;


   cin >> num;
   cout << num;
   for (int x = num; x > 0; x--) {
      val *= x;
   }
   cout << "Are you enjoying cs161? (y or n) " << endl;

   cin >> myanswer;
   if (myanswer == 'y')
      cout << "Yay!" << endl;
   else
      cout << "I hope you will soon!" << endl;

   return 0;

}

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

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Когда у вас есть утверждение как:

cout << "would you like to input another number?" << endl;

Первым инстинктом для пользователя будет набрать y или n в качестве ответа.Вы можете помочь пользователю, предоставив подсказку.

cout << "would you like to input another number (1 for yes, 0 for no)?" << endl;

Если вы это сделаете, было бы лучше быть последовательным во всей вашей программе.Следующая подсказка, которая ищет ответ ay / n, должна использовать тот же механизм.

cout << "Are you enjoying cs161? (1 for yes, 0 for no) " << endl;

Конечно, всегда проверяйте операции ввода, прежде чем использовать данные.

if ( !(cin >> ans) )
{
   // Input failed. Add code to deal with the error.
}
0 голосов
/ 17 октября 2018

почти наверняка это вызвало переполнение

   for (int x = num; x > 0; x--) {
      val *= x;
   }

что вы ввели для num?

...