我正处于大学项目中,并决定实施一种方法,可以接受来自文本文件的信息(在本例中称为“locations.txt”)。文本文件中的输入如下所示:
London
345
456
Madrid
234
345
Beinjing
345
456
Frankfurt
456
567
这个函数目前看起来像这样(你会发现我错过了While条件,当到达locations.txt中的文本末尾时完成添加输入,我尝试使用eof但这不起作用?!)。另外get函数需要一个char,所以不能接受输入为double,这是纬度和经度被定义为......
void populateList(){
ifstream inputFile;
inputFile.open ("locations.txt");
temp = new locationNode; // declare the space for a pointer item and assign a temporary pointer to it
while(HASNT REACHED END OF TEXT FILE!!)
{
inputFile.getline(temp->nodeCityName, MAX_LENGTH);
// inputFile.get(temp->nodeLati, MAX_LENGTH);
// inputFile.get(temp->nodeLongi, MAX_LENGTH);
temp->Next = NULL; //set to NULL as when one is added it is currently the last in the list and so can not point to the next
if(start_ptr == NULL){ // if list is currently empty, start_ptr will point to this node
start_ptr = temp;
}
else {
temp2 = start_ptr;
// We know this is not NULL - list not empty!
while (temp2->Next != NULL)
{
temp2 = temp2->Next; // Move to next link in chain until reach end of list
}
temp2->Next = temp;
}
}
inputFile.close();
}
您可以提供的任何帮助都非常有用。如果我需要提供更多细节我会做,我在一个繁忙的食堂atm和集中精力很难!!
答案 0 :(得分:4)
std::string city;
double lat, lgt;
while( (inputFile >> city ) && (inputFile >> lat) && (inputFile >> lgt ) ) {
// do something with values
}
答案 1 :(得分:2)
您可以将getline()
调用作为while循环的条件。一旦达到EOF,其返回值将评估为false。
答案 2 :(得分:2)
getline()
很重要,因为cin >> str;
之类的内容只会读取“纽约”或“胡志明市”等城市名称的第一个字。正如Kristo建议的那样,把它放在while循环条件下。
之后,您有两种可能性。您可以使用标准流来读取双精度数,在这种情况下,您应该确保阅读所有适当的换行符。 (file >> double_var;
会留下以下换行符,因此下面的getline()
将获取该行的其余部分,这是空的,而不是下一行。)当您确定时,这种情况会有效输入结构良好,在家庭作业问题上比现实世界更常见。
或者,您可以使用getline()
读取每一行,然后将文本转换为自己加倍。当然,有不同的方式。 C函数atod()
是最简单的,但如果数字为0或不是数字,则返回0。 C函数strtod()
设置起来比较复杂,但会区分这两种情况。您可以使用C ++解决方案istringstream
,但在这种情况下,它看起来比它的价值要麻烦得多。
答案 3 :(得分:1)
您可以使用fstream然后执行:
double d;
fs>>d;
答案 4 :(得分:0)
我认为你错过了与eof的NOT。它应该是这样的:
while( !File.eof() ); //eof is set when reached end of file.
// and you are looking for while NOT reached end of file..