Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 读取文件时如何计算百分比?_C++_C - Fatal编程技术网

C++ 读取文件时如何计算百分比?

C++ 读取文件时如何计算百分比?,c++,c,C++,C,我想知道在从文件流读取数据时如何计算百分比。我试过这种方法,但得到的结果是零 typedef struct Counter{ int range1,range2,range3,range4; double preset1 ,preset2 ,preset3 ,preset4; } countType; void analysis_range(double d, countType &ctp) { // from 0 to 1.00 KM

我想知道在从文件流读取数据时如何计算百分比。我试过这种方法,但得到的结果是零

typedef struct Counter{
    int range1,range2,range3,range4;
    double preset1 ,preset2 ,preset3 ,preset4;
}  countType;

    void analysis_range(double d, countType &ctp) {

        // from 0 to 1.00 KM
        if (d >= 0.00 && d <= 1.00) {
            ctp.range1 += 1;
            ctp.preset1 = ((ctp.range1 / (ctp.range1 + ctp.range2 + ctp.range3 +
                                          ctp.range4)));
        }
        // from 1.00 to 2.00 KM
        else if (d > 1.00 && d <= 2.00) {
            ctp.range2 += 1;
            ctp.preset2 = ((ctp.range2 / (ctp.range1 + ctp.range2 + ctp.range3 +
                                          ctp.range4))) *
                          10;
        }
        // from 1.00 to 2.00 KM
        else if (d > 2.00 && d <= 5.00) {
            ctp.range3 += 1;
            ctp.preset3 = ((ctp.range3 / (ctp.range1 + ctp.range2 + ctp.range3 +
                                          ctp.range4))) *
                          10;
        }
        // grater than 5.00 KM
        else if (d > 5.00) {
            ctp.range4 += 1;
            ctp.preset4 = ((ctp.range4 / (ctp.range1 + ctp.range2 + ctp.range3 +
                                          ctp.range4))) *
                          10;
        }
    }

    void ProcesData(int rank, int numProcs) {

        static countType count;
        MPI_Datatype recType = createRecType();
        // read file and populate the vectors
        ifstream foodbankFile("foodbanks.dat");
        ifstream residenceFile("residences.dat");

        // populate datavector
        std::vector<Foodbank> foodbankData(
            (std::istream_iterator<Foodbank>(foodbankFile)),
            std::istream_iterator<Foodbank>());

        Residence res;
        int numLines = 0;

        while (!residenceFile.eof()) {
            residenceFile >> res.x >> res.y;

            if (numLines % numProcs == rank) {
                // call the  process
                // populate_distancesVector(res,foodbankData);
                analysis_range(populate_distancesVector(res, foodbankData),
                               count);
            }
            ++numLines;
        }

        std::cout << "for Rank" << rank << ",from 0 to 1.00 KM:" << count.range1
                  << ",%" << count.preset1
                  << ",from 1.00 to 2.00 KM:" << count.range2 << ",%"
                  << count.preset2 << ",from 2.00 to 5.00 KM:" << count.range3
                  << ",%" << count.preset3
                  << ",grater than 5.00 KM:" << count.range4 << ",%"
                  << count.preset3 << std::endl;
    }
typedef结构计数器{
int范围1、范围2、范围3、范围4;
双预设1、预设2、预设3、预设4;
}计数类型;
孔隙分析范围(双d、计数类型和ctp){
//从0公里到1.00公里
如果(d>=0.00&&d 1.00&&d 2.00&&d 5.00){
ctp.range4+=1;
ctp.preset4=((ctp.range4/(ctp.range1+ctp.range2+ctp.range3+
ctp.range(4)))*
10;
}
}
void ProcesData(int秩,int numProcs){
静态计数类型计数;
MPI_数据类型recType=createRecType();
//读取文件并填充向量
ifstream foodbankFile(“foodbanks.dat”);
ifstream residenceFile(“residences.dat”);
//填充数据向量
std::向量foodbankData(
(std::istream_迭代器(foodbankFile)),
std::istreamu迭代器();
res公寓;
int numLines=0;
而(!residefile.eof()){
住宅文件>>res.x>>res.y;
if(numLines%numProcs==rank){
//调用进程
//填充_distancesVector(res、foodbankData);
分析范围(填充距离向量(res、foodbankData),
计数);
}
++努姆林;
}

std::cout您可能会得到零,因为ctp.range1到ctp.range4不是浮点值。如果将整数除以整数,结果也会变成整数。将其中一个操作数强制转换为浮点或双精度,如下所示:

ctp.preset1 = (((float) ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4)));

可能会得到零,因为ctp.range1到ctp.range4不是浮点值。如果将整数除以整数,结果也会变成整数。将其中一个操作数强制转换为浮点或双精度,如下所示:

ctp.preset1 = (((float) ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4)));

可能会得到零,因为ctp.range1到ctp.range4不是浮点值。如果将整数除以整数,结果也会变成整数。将其中一个操作数强制转换为浮点或双精度,如下所示:

ctp.preset1 = (((float) ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4)));

可能会得到零,因为ctp.range1到ctp.range4不是浮点值。如果将整数除以整数,结果也会变成整数。将其中一个操作数强制转换为浮点或双精度,如下所示:

ctp.preset1 = (((float) ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4)));

因此,我知道ctp.preset1假设根据ctp.range1中的计数保持范围1的百分比

在方程的这一部分中,如果使用整数,得到零的原因是:

(ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4))
当整数数学截断时,对于有意义的范围计数,该值将始终计算为零。将其更改为:

(ctp.range1/double(ctp.range1+ctp.range2+ctp.range3+ctp.range4))

一切都会好起来的。

因此,我知道ctp.preset1应该根据ctp.range1中的计数保持范围1的百分比

在方程的这一部分中,如果使用整数,得到零的原因是:

(ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4))
当整数数学截断时,对于有意义的范围计数,该值将始终计算为零。将其更改为:

(ctp.range1/double(ctp.range1+ctp.range2+ctp.range3+ctp.range4))

一切都会好起来的。

因此,我知道ctp.preset1应该根据ctp.range1中的计数保持范围1的百分比

在方程的这一部分中,如果使用整数,得到零的原因是:

(ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4))
当整数数学截断时,对于有意义的范围计数,该值将始终计算为零。将其更改为:

(ctp.range1/double(ctp.range1+ctp.range2+ctp.range3+ctp.range4))

一切都会好起来的。

因此,我知道ctp.preset1应该根据ctp.range1中的计数保持范围1的百分比

在方程的这一部分中,如果使用整数,得到零的原因是:

(ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4))
当整数数学截断时,对于有意义的范围计数,该值将始终计算为零。将其更改为:

(ctp.range1/double(ctp.range1+ctp.range2+ctp.range3+ctp.range4))



一切都会好起来。

对不起,但我很确定你必须用英语问这个问题。现在不可能理解。请问,百分比是多少?@PawełStawarz;Hufff.。我尽了最大的努力。:)希望现在有意义。srroy忘了添加我的结构。对不起,但我很确定你必须用英语问这个问题。很好现在不可能理解。请告诉我什么的百分比。我尽了最大的努力。希望它现在能有意义。斯罗伊忘了添加我的结构。对不起,但我很确定你必须用英语问这个问题。现在不可能理解。请告诉我什么的百分比。我尽了最大的努力。呵呵我很抱歉,但我很确定你必须用英语问这个问题。现在不可能理解。什么的百分比,请?@PawełStawarz;Hufff.。我尽了最大的努力。:)希望它现在有意义。srroy忘了添加我的结构你怎么知道
ctp.range1
不是
float
?o_u__________________________________________________________________;谢谢。:)你怎么知道
ctp.range1
不是
float
?你说不管你怎么尝试都会得到零,所以你就不知道了。错了吗?Haccks,你没有给我们范围或预设的类型,但是范围=int和预设=double是最常见的,并且经常会导致你描述的麻烦。@Richard I你不认为Haccks是问这个问题的人吗?@remyabel;谢谢。:)你是怎么知道
ctp的。range1
不是
float
?因为你说不管你怎么做都会得到零。错了?Haccks,你没有给我们范围或预设的类型,但是range=int和pres