ifstream没有在C ++中读取文件中的值

时间:2012-03-19 02:25:37

标签: c++ fstream ifstream

我是C ++的新手用户,目前正在CS学习大学课程,因为我的代码没有从我的输入文件“OH-in.dat”中读取值,所以我被卡住了。此外,当谈到一个标记值时,我不知道该怎么做(因为我需要一个while循环,我想我只需要将sentinel值作为我的第一个值并简单地停止循环从那时起。)

这是我到目前为止的代码:

#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;
}

这是我要输入的前四个值。

AntiochCollege

YellowSprings

330

27800

...

最后,它将会出现。

'* * *'

此数据来自petersons.com

10月10日和11日。一些名称和位置

数据已被更改。


现在,我对这段代码的主要两个问题就是让C ++读取值,然后让代码无法无限重复。

1 个答案:

答案 0 :(得分:0)

您可以使用类似

的内容
if (infile.fail()) break;

紧接着四个“infile&gt;&gt;”之后声明。或者你可以使用.eof()而不是.fail()。无论哪种方式,当 infile 无法提供更多数据时,它将退出循环。

在您的具体情况下,当然,您正在寻找哨兵而不是文件的结尾,但同样的原则适用。这是C ++的 break 语句的理想情况。

顺便提一下,一旦你添加中断,你可能不再需要 do-while 了。 while(true) for(;;) - 也就是说,一个条件总是通过的循环 - 可能会起作用。这个循环的自然退出点位于中间,在中断,你将添加到它。