2016-03-22 5 views
0

Мой код C++ дает выход «nan», когда я вызываю функцию в cout. Если я удалю тег комментария ('//') и вызову функцию без cout, результат будет правильным.Почему cout дает выход «nan»?

Код:

#include <iostream> 
#include<math.h> 

using namespace std; 

double sumOfSquare(double x, double y){ 
    // cin>> x>> y; 
    double sum1 = 0; 
    for(double i = x; i <= y; i++){ 
     sum1 += pow(i , 2); 
    } 
    //cout<< sum1 <<endl; 

} 

double squareOfSum(double a, double b){ 
    double sum2 = 0; 
    for(double j = a; j <= b; j++){ 
     sum2 += j; 
     } 
     // cout<< pow(sum2, 2) <<endl; 
} 

int main() 
{ 
    cout<< sumOfSquare(1, 100); 
    squareOfSum(1, 100); 
    cin.get(); 
    return 0; 
} 
+0

Поскольку вы используете C++, не '#include '. Используйте обернутый заголовок C++: '#include '. – callyalater

ответ

3

Функция sumOfSquare и squareOfSum не возвращает значение. Они должны вернуть что-то, чтобы cout распечатать их (или для любого другого кода, чтобы использовать значения). Таким образом, две функции могут возвращать NaN или 0 (на мой компилятор) или что-то еще.

Пример:

double sumOfSquare(double x, double y){ 
    // cin>> x>> y; 
    double sum1 = 0; 
    for(double i = x; i <= y; i++){ 
     sum1 += pow(i , 2); 
    } 
    return sum1; 

} 

double squareOfSum(double a, double b){ 
    double sum2 = 0; 
    for(double j = a; j <= b; j++){ 
     sum2 += j; 
     } 
    return pow(sum2, 2); 
} 
+2

В качестве побочного примечания во многих компиляторах, если вы не вернете значение из функции, ожидающей возвращаемого значения, оно вернет построенное значение по умолчанию, которое обычно представляет собой NaN для удвоений. – callyalater

+0

Хорошо, спасибо большое! –

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