文件中出现的次数

Number of occurrences in file

本文关键字:文件      更新时间:2023-10-16

我有以下文件文本.txt其中第一列表示患者#:

1 325 160 2.0
1 600 100 6.2
2 325 220 1.0
3 600 200 4.4
4 325 100 3.0
4 325 88 3.2
2 600 200 3.3
2 325 100 3.3
4 600 210 3.4
5 325 105 3.5
1 600 110 6.0
3 325 100 3.1
2 600 120 5.5
2 600 125 5.5
5 120 60 2.2
2 325 100 3.4

我想编写一个程序,用户可以在其中输入患者#,并且函数将指示文件中列出患者编号的次数,但我似乎无法弄清楚。这是我到目前为止所拥有的:

#include <iostream>
#include <fstream>
using namespace std;

bool analyzeData(int patientNum, int *numMeasurements);

int main()
{
    int patientNum;
    char option;
    int numMeasurements;
    do
    {
    cout << "nNew Pain Drug - Half-Life Determinationn";
    cout << "---------------------------------------n";
    cout << " [P] - Patient Summaryn";
    cout << " [H] - Highest two half-lifesn";
    cout << " [X] - to Exitn";
    cout << "nEnter Option: ";
    cin >> option;
    switch (option)
    {
    case 'p': 
        cout << "Enter patient number (1-5): ";
        cin >> patientNum;
        analyzeData(patientNum, &numMeasurements);
        cout <<"num=" << numMeasurements<< endl;
        break;
    case 'h': 
        break;
    case 'x': option = false;
        break;
    default: cout << "Invalid option entered.n";
    }
    }
    while (option);
}
    bool analyzeData(int patientNum, int *numMeasurements)
{   
    double C0, Ct, t;

    int patient;
    ifstream fin;
    fin.open ("Text.txt");
    if (fin)
{
    while (fin >> patient >> C0 >> Ct >> t) 
    {
        if (patient == patientNum)
        {
            bool analyzeData = true;
            for (numMeasurements=0; patient != patientNum; numMeasurements++)
                *numMeasurements; 
        }
    }
}
    else
{
    cout << "Errorn";
}
    fin.close();
    return analyzeData;
}

当 patient# = 1 时,函数numMeasurements当前输出值 -858993460,我知道这是不正确的。你知道我做错了什么吗?

analyzeData函数中,变量numMeasurements是一个指针未初始化的数据。如果您像这样使用它,例如 (*numMeasurements)++,那么你会有未定义的行为

但是,您不会这样做,而是根本不会对指针执行任何操作。你确实在循环中使用它

for (numMeasurements=0; patient != patientNum; numMeasurements++)
    *numMeasurements;

但该循环实际上并没有修改numMeasurements最初指向的内容。相反,该循环初始化指针以指向0 C++是空指针,然后您递增指针(而不是它指向的内容(,然后在循环体中读取numMeasurements指向的内容,但丢弃结果(我不确定这是否真的是未定义的行为(。编译器可能会优化整个循环。

这将我们带回到main函数,其中numMeasurements仍未初始化。然后你打印 numMeasurements 的值,但该值是不确定的(因为你还没有初始化它(,然后你得到未定义的行为。

当到达此行时,patient == patientNum,因此它永远不会进入循环。 numMeasurements 永远不会初始化,分析数据返回 true。

for (numMeasurements=0; patient != patientNum; numMeasurements++)
            *numMeasurements; 

我不确定 for 循环的用途,但您应该检查这部分。