ifstream не читает значения из файла в С++

Я начинающий пользователь С++, в настоящее время прохожу курсы колледжа по CS, и я застрял, так как мой код не считывает значения из моего входного файла «OH-in.dat». Более того, я не совсем знаю, что делать, когда дело доходит до дозорного значения (поскольку мне требуется цикл do while, я думаю, мне просто нужно сделать дозорное значение первым значением, которое я беру, и просто остановить цикл С тех пор.)

Вот код, который у меня есть до сих пор:

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

int main()
{
// Declare the variables to be used in the program.

ifstream infile;
string schoolname, location;
int tuition, enrollnum, i;
double average;

//Obtain the values for the variables from the file given.

infile.open("OH-in.dat");               //Accomplish task 1.
{
    i = 0;
    cout << "Schools in Cincinnati with tuition below $20,000." << endl;
    cout << "-----------------------------------------------------" << endl;
    do 
    {
        // Read the values in the data file.
        infile >> schoolname;
        infile >> location;
        infile >> enrollnum;
        infile >> tuition;

        // Separate the values that contain Cincinnati and if it's tuition is over 20000 dollars.

        if (schoolname == "Cincinnati" && tuition < 20000)
        {
            cout << schoolname << "                     $" << tuition << endl;
            i++;
        }
        // Display the  number of schools that fit the criteria.
        cout << "Number of schools:                     " << i << endl;
    }
    //While the 1st value read in is not ***, the loop will continue.
    while (schoolname != "***");
    //Close the file.
    infile.close();
}
system("pause");
return 0;
}

Вот первые четыре значения, которые я буду вводить.

Антиохийский Колледж

ЖелтыйСпрингс

330

27800

...

Наконец, до этого дойдет.

'* * *'

Эти данные были получены с сайта petersons.com.

10 и 11 октября. Какое-то имя и место

данные изменены.


Итак, две основные проблемы, которые у меня были с этим кодом, заключались в том, чтобы просто заставить C++ читать значения и, во-вторых, заставить код не повторяться бесконечно.


person Thomas Edwards    schedule 19.03.2012    source источник


Ответы (1)


Вы можете использовать что-то вроде

if (infile.fail()) break;

сразу после четырех операторов «infile >>». Или вы можете использовать .eof() вместо .fail(), если хотите. В любом случае, он выйдет из вашего цикла, когда у infile больше не будет данных для передачи.

В вашем конкретном случае, конечно, вы ищете дозорный, а не конец файла, но применяется тот же принцип. Это идеальный случай для оператора C++ break.

Между прочим, как только вы добавите break, вам, вероятно, больше не понадобится do-while. Вероятно, подойдет while(true) или for(;;) — то есть цикл, условие которого всегда выполняется. Естественная точка выхода этого цикла находится посередине, на разрыве, который вы добавите к нему.

person thb    schedule 19.03.2012