C ++ fstream如何跳过一行?

时间:2017-05-25 07:32:14

标签: c++ fstream

我知道如何打开文件并阅读它但我需要帮助跳过线。例如像这样

  1. Tom Atto
  2. 6
  3. 11
  4. Carky oki
  5. 4
  6. 9
  7. 我想将6和4存储到一个变量中,将11和9存储到其他变量中。我的任务是创建一个程序,它取一个人的身高并解决它以获得理想的体重。另外,只是想知道有没有办法获得每个名字,然后是英尺,最后是英寸?列表中有一个模式。它以一个名称开头,然后是英尺,然后是英寸,然后重新命名。

4 个答案:

答案 0 :(得分:0)

你知道第一行是一个名字(第一名,第二名),每个名字后面都有两行价值

string Fname, Lname;
int inchVlaue, ftValue;

ifstream myFile("name.txt");

while(myFile.peek() != EOF)
{
    myFile >> Fame;
    myFile >> Lname;
    myFile >> inchVlaue;
    myFile >> ftValue;


}

答案 1 :(得分:0)

至于你在这里提出的问题的第二部分:

  

另外,只是想知道有没有办法获得每个名字,然后是ft,最后是英寸?列表中有一个模式。首先是一个名字,然后是英尺,然后是英寸,然后再命名。

考虑到所显示的模式,这应该得到所有数据。

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

struct Person {
    std::string name_;
    unsigned feet_;
    unsigned inches_;

    Person() 
      : feet_(0), inches_(0) {}
    Person( const std::string& name, const unsigned& feet, const unsigned& inches )
      : name_(name), feet_(feet), inches_(inches) {}
};

int main() {
    std::string filename( "somefilename.txt" );
    std::ifstream fileIn;

    // Temps -
    std::string name;
    unsigned feet   = 0;
    unsigned inches = 0;

    std::vector<Person> people;

    fileIn.open( filename.c_str() ); 

    while ( fileIn >> name >> feet >> inches ) {
        Person person( name, feet, inches );
        people.push_back( person );
    }

    if ( fileIn.is_open() ) {
        fileIn.close();
    }

    return 0;
}

跳过一条线;如果你知道要跳过哪一行或哪一行;你现在可以检查你的矢量,看看需要消除或忽视的东西。

修改

如果没有在我的编译器中运行上面的代码并且在我的脑海中,我不记得在字符串的while循环中的第一次读取是否只获得第一个名称的第一组字符,或者它是否将得到整行直到返回或换行符。我没有在我的IDE中输出这个,因为我目前还没有它可用。如果这往往是一个问题,您将需要修改结构以具有第二个字符串作为姓氏并添加第二个临时变量,并在第一个无符号之前将第二个字符串添加到while循环以及添加它到结构构造函数。

答案 2 :(得分:0)

如果您有某种模式,您还可以使用代表名称的临时std::stringstd::regex来查找值。 我的意思是:

std::regex nameReg("([[:alpha:]]){1,}") // for name
std::regex numReg("([0-9]{1,})") // for ft

您需要一个循环来查找条件并交换临时名称。 它可能有点矫枉过正:)但它是常见且通用的解决方案

答案 3 :(得分:0)

你可以有一点像

这样的功能
inline std::istream&swallow_rest_of_line(std::istream& from)
{
    char c;
    do from.get(c); while(from.good() && c !='\n');
    return from;
}

跳过行