1. Ошибка QNAN С++

Я новичок в программировании и пытаюсь написать новую программу. При проверке моей программы он возвращает код ошибки 1. # QNAN. Я попытался изолировать переменную и исследовать ответы, но не могу найти никаких решений.

Мой код:

 // This is a program to decide what culvert should be properly used for a specific installation
// using given measurements and data
//
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;
// initializing functions 
double slope_function();
double cbasin();
// initializing classes: Subdivisions specs

//intitializing global variables
double edge_road =0;
double up_stream  =0;
double down_stream =0;
double tbm =0.0;

//double culv_length =0;
double slope = 0.0 ;
char street_name[1001];
int min_culv = 15;
double up_strm_culv =0;
double dwn_strm_culv =0;


int main (int nNumberofArgs, char* pszArgs[])
{
    cout<< "This program will allow the surveyor to double check their calculations\n";
    cout << "in deciding what size, type, and requirements are allowed for the\n";
    cout << "installation of culverts in Terrebonne Parish.\n\n";



// begin input
   cout << "what is the name of the street\nwhere the culverts will be installed: ";
   cin.getline (street_name,1000);
   cout << endl;
   cout << "What is the Benchmark: ";
   cin >> tbm;
   cout << endl;
   cout << "What is the elevation of the edge of the road: ";
   cin >> edge_road;
   cout << endl;
   cout << "What is the up-stream culvert size: ";
   cin >> up_strm_culv;
   cout << endl;
   cout << "What is the culverts up-stream inverted elevation: ";
   cin >> up_stream;
   cout << endl;
   cout << "What is the down-stream culvert size: ";
   cin >> dwn_strm_culv;
   cout << endl;
   cout << "What is the culverts down-stream inverted elevation: ";
   cin >> down_stream;
   cout << endl;
   cout << "What is the length of culvert requested: ";
   cin >> culv_length;


   cout << "Your slope is : "; 
   cout << slope_function();
   cout << endl;
   cout << street_name;
   cout << endl;
   cout << cbasin();


    cout << endl;
  // wait until user is ready before terminating program
  // to allow the user to see the program results 
  system ("pause");
  return 0;
}  

// slope function 
double slope_function()
{
    double riseoverrun = 0.0;
    slope = (up_stream - down_stream)/ culv_length;
    return slope;
}


// Catch Basin function
double cbasin ( )
{
    double cb = 0;
    cb = culv_length / 60;
    cout << endl;
    cout << "You need ";
   cout << cb;
   cout << " catch basins for this job.";
   cout << endl;
}

Ответы

Ответ 1

1 # QNAN представляет собой строковое представление для "тихого NAN". "NAN" - "не-число" и применяется только к поплавкам и удвоениям.

NAN могут быть очень полезны для представления "нулевых" значений (вместо того, чтобы выбирать некоторый подлинный номер и надеяться на то, что вам не понадобится это число для его естественного значения).

Некоторые математические операции могут возвращать NAN, если операция "недействительна" (например, берет журнал отрицательного числа).

Вы можете создать QNAN из С++, используя

double d = std::numeric_limits<double>::quiet_NaN();

Любая операция сравнения (==, <= и т.д.) в NAN возвращает false, даже сравнивая ее равенство с самим собой, за исключением if =, который всегда возвращает true (даже при сравнении с самим собой).

(Фактическая ошибка в вашем коде выглядит как функция, которая возвращает double, но не имеет оператора возврата).