0

私は、患者ID、患者の血圧記録の数を取得し、それらを表示してから、その患者の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;
}

for ループと while ループを一緒に使用しようとしましたが、解決できない非常に奇妙なエラーが発生していました。そこで、ネストされた while ループを使用することにしました。残念ながら、コードは実行時にフリーズします。データファイルはそこにあり、正しいデータが含まれていますが、何らかの理由でプログラムを動作させることができません。誰かが私を助けてくれれば、本当に感謝しています。

--編集ファイルの1つが次のようになります

4567 4 180 140 170 150
5643 2 125 150
4

1 に答える 1

0
reader != "\n"

readerはでありifstream、"\n" は文字列リテラルであるため、常に true です。
両方が変換されたとしてもvoid*(明らかにコンパイルされているので疑わしい)、への変換の結果readervoid*決してリテラルのアドレスにはなりません。

あなたのロジックにも少し欠陥があります-avgループが機能した場合、最後に読み取られた値の2倍の値になります。

それを修正することは演習として残されています。

于 2013-10-07T21:04:05.327 に答える