Я работаю над проектом, в котором учитываются идентификационные данные пациента, количество записей об артериальном давлении пациентов, отображает их, затем производится среднее показание артериального давления на основании 1 или более записей артериального давления для этого пациента. Все данные считываются из файла. Это код, который я получил до сих пор,
#include <iostream>
#include <string>
#include <conio.h>
#include <fstream>
using namespace std;
int main()
{
//Initialize Required Variables For Program
int patientCount = 0;
string id;
string rHowMany; //String To Read From File
int howMany = 0;
int howManyCount = 0;
int avg = 0;
int avg2;
string line;
int numbre_lines = 0;
ifstream reader ("data.txt"); //Open The Data File To Be Read From
do
{
reader >> id;
reader >> howMany;
cout << "The Patient ID Is: " << id << endl;
cout << "The Number Of Blood Pressure Record This Patient Has Is: " <<
howMany << endl;
do
{
reader >> avg;
avg = avg + avg;
}
while (reader != "\n");
cin.clear();
avg = avg / howMany;
cout << "The Patient Average BP Reading Is: " << avg;
}
while (!EOF);
return 0;
}
Я попытался использовать для циклов и в то время как циклы вместе, но получал некоторые действительно странные ошибки, которые я не мог решить. Поэтому я решил сделать это с вложенным циклом while. К сожалению, код просто зависает при выполнении. Файл данных там, с правильными данными в нем, но по какой-то причине я просто не могу заставить программу работать. Если бы кто-то мог мне помочь, я был бы очень признателен.
--Edit Вот как выглядит один из файлов
4567 4 180 140 170 150
5643 2 125 150
reader != "\n"
всегда верно, потому что reader
является ifstream
а "\n" - строковым литералом.
Даже если оба они преобразуются в void*
(что, как я подозреваю, поскольку он, по-видимому, компилируется), результат преобразования reader
в void*
никогда не будет адресом литерала.
Ваша логика тоже немного ошибочна - avg
будет в два раза больше значения последнего значения, если цикл работал.
Фиксирование - это упражнение.