文件中出现的次数
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 循环的用途,但您应该检查这部分。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到