2015-02-02 2 views
0

Мне было поручено исправить пример кода, полный ошибок для класса программирования C++. Эта программа спроектирована так, что в качестве входа вводятся два числа - первое число, впоследствии деленное на второе, а выход - остаток. Я отработал почти все ошибки, но у меня возникла проблема с одной оставшейся ошибкой (которую я могу собрать), которую я не могу понять.Работа с ошибкой недействительных операндов

#include <iostream> 
using namespace std; 

int main() 
{ 
    int firstNumber; 
    double secondNumber; 

    cout << "Please enter two whole numbers: "; 
    cin >> firstNumber >> secondNumber; 
    cout << firstNumber << " divided by " << secondNumber 
     << " is " << (firstNumber/secondNumber) << endl 
     << "with a remainder of " << (firstNumber % secondNumber) 
     << endl; 
} 

Ошибка я получаю в строке 13 ... «недействительные операнды типов„межда“и„двойной“бинарного 'оператор%. ?.

Любые советы о том, как работать по этому вопросу ...

+4

В C++ '%' работает только с целыми числами. – molbdnilo

+0

Использование google-поиска в качестве инструмента, помогающего дать мне несколько возможных предложений. Я попытался отключить fmod() с% в результате, но не смог заставить это работать. Хотя, по общему признанию, я немного поиграл с этим. Является ли fmod() больше на правильном пути того, что мне нужно использовать для исправления этой программы? – JaydoubleU

+0

Да, выполнение 'std :: fmod (firstNumber, secondNumber)' будет работать. – 0x499602D2

ответ

0

(firstNumber % secondNumber) является причиной вашей ошибки, поскольку % работает только с целыми типами Если вам нужно, вы можете либо бросить secondNumber к и ИНТ, как:

(firstNumber % static_cast<int>(secondNumber)) 

Или вы можете использовать функцию fmod()

+0

Я попытался использовать 'secondNumber' для int, и программа не будет компилироваться. Возможно, это может быть связано с тем, что операнд 'double' связан с' secondNumber' в начале программы ...? – JaydoubleU

+0

@JaydoubleU Что такое ошибка компилятора? – NathanOliver

1

многие люди говорят о том, как мод оператора (%) в C++ работает только с целыми числами. Некоторые полагают, литье secondNumber int и другие упомянули операции мод, которые работают с числами с плавающей запятой, такими как fmod.

Лучшим решением этой проблемы было бы объявить secondNumber как целое число в начале программы. При работе с целым делением (остатком частного) нет причин использовать числа с плавающей запятой. Определение проблемы может быть определено только для целых чисел, поэтому мы должны использовать только целые числа.

#include <iostream> 
using namespace std; 

int main() { 
    int firstNumber, secondNumber; 

    cout << "Please enter two whole numbers: "; 
    cin >> firstNumber >> secondNumber; 
    cout << firstNumber << " divided by " << secondNumber 
     << " is " << (firstNumber/secondNumber) << endl 
     << "with a remainder of " << (firstNumber % secondNumber) 
     << endl; 
    return 0; 
} 
+0

Это, конечно же, предназначенное решение –

+0

@ 0xDE1337 ... это сделало трюк. Мне было интересно, влияет ли декларация firstNumber и secondNumber на программу.Но я определенно не придумал, что вы сделали. Благодаря! – JaydoubleU

Смежные вопросы