我是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 ++读取值,然后让代码无法无限重复。
答案 0 :(得分:0)
您可以使用类似
的内容if (infile.fail()) break;
紧接着四个“infile&gt;&gt;”之后声明。或者你可以使用.eof()而不是.fail()。无论哪种方式,当 infile 无法提供更多数据时,它将退出循环。
在您的具体情况下,当然,您正在寻找哨兵而不是文件的结尾,但同样的原则适用。这是C ++的 break 语句的理想情况。
顺便提一下,一旦你添加中断,你可能不再需要 do-while 了。 while(true)或 for(;;) - 也就是说,一个条件总是通过的循环 - 可能会起作用。这个循环的自然退出点位于中间,在中断,你将添加到它。