尝试在数组(C )中找到平均值时,获取-NAN(IND)输出

Getting a -nan(ind) output when trying to find averages within an array (c++)

本文关键字:输出 获取 -NAN 平均值 IND 数组      更新时间:2023-10-16

我试图在数组中获得一组数字的平均值,并且我将-nan(ind)作为我的输出。我不确定导致这个问题的原因。这是我到目前为止在C 中写的代码:

#include "pch.h"
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
void input_from_file(ifstream & inFile, char * item, char * name, double & price, double & cost, double & material_cost);
double array_price[50], array_total_cost[50];
double price, base_cost, material_cost;
int cnt = 0, i;
double calAverage(double arr[], int s);
char item[2]{ "" };
char name[21];
double total_cost = base_cost + material_cost;
double profit = price - total_cost;

void File_Input(ifstream & Main_File)
{
    do {
        string File_Name;
        cout << "Please enter the file name including extension: ";
        cin >> File_Name;
        Main_File.open(File_Name);
    } while (!Main_File);
}
void File_Read(ifstream & The_File)
{
    cout << setw(29) << left << "Name" << right << setw(10) << "Price" << setw(10) << "Cost" << setw(10) << "Profit" << "n" << endl;
    string Typed_File;
    int increment = { 0 };
    while (!The_File.eof())
    {
        input_from_file(The_File, item, name, price, base_cost, material_cost);
        total_cost = base_cost + total_cost;
        profit = price - total_cost;
        array_total_cost[increment] = total_cost;
        array_price[increment] = price;
        increment++;
        cout << setw(29) << left << name << right << setw(10) << price  << setw(10) << total_cost << setw(10) << profit << endl;
    };
    cout << "nnThe average price is " << calAverage(array_price, cnt);
    cout << "nThe average cost is " << calAverage(array_total_cost, cnt) << " n";
}
void input_from_file(ifstream & inFile, char * item, char * name, double & price, double & base_cost, double & material_cost) 
{
    inFile >> item;
    inFile >> name;
    inFile >> price;
    inFile >> base_cost;
    inFile >> material_cost;
    array_price[cnt] = price;
    array_total_cost[cnt] = base_cost + material_cost;
}
double calAverage(double arr[], int s)
{
    int i;
    double sum = 0;
    for (i = 0; i < s; i++)
    {
        sum += arr[i];
    }
    return (sum/(double)(s));
}
int main()
{
    ifstream The_File;
    File_Input(The_File);
    File_Read(The_File);
}

这是我试图从以下内容中读取的文件:

food2.txtD Whitewine 3.5 0.75 0.0

f courgetts 751.88 125.31 75.19

f broccoliauroquefort 860.63 227.81 111.38

D Redwine 357.88 76.69 0.0

f coqauvin 774.38 129.06 77.44

f GratIndepates 886.13 234.56 114.68

f gnocchiauxlegumes 368.38 78.94 55.23

f raviole 796.88 132.81 79.69

f patesfraichesaunoix 911.63 241.31 117.98

d牛奶378.88 81.19 0.0

f rizaucumin 819.38 136.56 81.94

f gratinepolenta 937.13 248.06 121.28

D咖啡389.38 83.44 0.0

f事物毒剂841.88 140.31 84.19

f gateaudepommes 962.63 254.81 124.58

D茶3.00 .69 0.0

f souped'epeautre 864.38 144.06 86.44

f tartiflette 988.13 261.56 127.88

D WaterWithgas 4.38 5.23 0.0

f aligot 886.88 147.81 88.69

f abcdefghijklmnopqrst 999.99 268.31 131.18

这是我得到的完整输出:输出

任何帮助将不胜感激。谢谢

确保将cnt ++;添加到wir循环中。如果可能的话,还要尝试远离全球变量。如前所述,这是eof在段循环中不良的原因

不增加 cnt的速度将其留下为零。这导致计算0.0 / 0,即nan。