Игнорируйте символ, если он присутствует, и продолжайте читать значения int разных размеров - PullRequest
0 голосов
/ 08 ноября 2019

Я пишу математическую викторину, которая выполняет сложение, вычитание, умножение и деление. В моей функции вычитания я не могу понять, как игнорировать введенный пользователем знак «-» в части cin >> unserInput, так как это не всегда требуется (например, если оно положительное).

У меня есть оператор if, который, если вычисляемый машиной результат является отрицательным, должен иметь возможность заклинать символ "-", но программа падает, если пользователь его пропускает. Как я могу проверить наличие символа "-", игнорировать его, если он есть, и продолжать извлекать значения типа int, а если его нет, просто получить значения?

void subFractions(int num1 , int num2 , int denom1 ,int denom2 ,int answerNum 
    , int answerDenom , int resultNum , int resultDenom ,  int number , int 
    numCorrect = 0)
    {
    // use random number to work
    srand(time(NULL));

    // begin counter
    number = 1;

    // count number of math problems to be pushed to user
    while ( number < 11)
    {
    //Assigning the numerators and denominators to random numbers
    //between 1 to 10

        num1 = rand() % 10 + 1;     // numerator 1
        num2 = rand() % 10 + 1;     // numerator 2
        denom1 = rand() % 10 + 1;   // denom 1
        denom2 = rand() % 10 + 1;   // denom 2
        char sign;                  // operator sign (/)
        char neg;                   // pull negative sign in if required

        // push header to user
        cout << "Question " << number << ": What is the result of the 
        following?" << endl;
        cout << right << setw(3) << num1 << right << setw(8) << num2 << endl;
        cout << right << setw(3) << " ---" << right << setw(3) << "-" << 
        right  << setw(5) << " ---" << endl;
        cout << right << setw(3) << denom1 << right << setw(8) << denom2 << 
        endl;

        //Calculate resultant
        resultNum = ( ( num1 * denom2 ) - (denom1 * num2 ) );
        resultDenom = ( denom1 * denom2 );
        double resultant = resultNum / resultDenom;

        //getting the answer from the user
        cout << "Enter your answer in the form numerator / denominator: ";

        // check resultant for negative number
        if (resultant < 0)
        {
           cout << "neg answer" << endl;
           cin >> neg >> answerNum >> sign >> answerDenom;
           answerNum = (-1) * answerNum;
           cout << endl;
        }   // end negative number check
        else
        {
           cout << "pos answer" << endl;
           cin >> answerNum >> sign >> answerDenom;
           cout << endl;
        }   // end positive number check
        double userResultant = answerNum / answerDenom;

        //if the answer is right
        if (resultant == userResultant)
            {
             cout << "Correct!" << endl;
             numCorrect++;
            }   // end correct statement
        else
        {
           cout << "That is not correct. " << endl;

           //Reshowing the fraction with answer of the numerator
           cout << right << setw(3) << num1 << right << setw(8) << num2 << 
           right << setw(8) << resultNum << endl;

           //Showing the fraction and the symbols
           cout << right << setw(3) << " ---" << right << setw(3) << "-" << 
           right << setw(5) << " ---" <<
           right << setw(3) << "=" << right << setw(5) << "---" << endl;

           //Showing the denominator with answer of the denominator
           cout << right << setw(3) << denom1 << right << setw(8) << denom2 
           << setw(8) << resultDenom << endl;
           cout << "" << endl;
        }   // end incorrect statement

Если пользовательне вводит "-", оно должно выкинуть неверное утверждение. Как это, это просто сбой. Предположительно, потому что он загружает значения в неправильную переменную и оставляет последнее пустым.

...