从文本文件中读取双重类型 - C ++

时间:2010-03-25 12:42:24

标签: c++

我正处于大学项目中,并决定实施一种方法,可以接受来自文本文件的信息(在本例中称为“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和集中精力很难!!

5 个答案:

答案 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..