阅读" n"文件C ++中的行数

时间:2014-04-27 05:18:08

标签: c++

快速提问,

假设您被告知从文本文件中读取输入,只有10行;尽管如此,文本文件有40行。执行以下操作是不好的编程:

while ( infile >> input && num_lines < 10 ) {
      do whatever...
      num_lines++;
}
// closed file
infile.close();

有更好的方法吗?

我应该提到当我说&#34; line&#34;我只是说以下内容:

planet
tomorrow
car
etc

所以是的,要阅读一行文字,应该实现获取行功能

2 个答案:

答案 0 :(得分:3)

它不会糟糕编程。您检查输入成功的效果要好于大多数新手,所以不要为此感到沮丧。但是,您当前的循环不正确。

事情错了:

  • 它读取字符串,而不是
  • 它实际上可以读取 11个行,处理前十行并丢弃最后一行。

试试这个:

int num_lines = 0;
std::string input;

for (; num_lines < 10 && std::getline(input); ++num_lines)
{
    // do-whatever
}

// num_lines holds the number of lines actually read

修改:更改问题后更新。

您拥有的输入文件是单词。如果您希望确保每行只收到一个单词,并且必须以行分隔,则需要处理更多工作:

#include <iostream>
#include <sstream>

int num_lines = 0;
std::string input;

while (num_lines < 10 && std::getline(input))
{
    std::istringstream iss(input);
    std::string word;
    if (iss >> word)
    {
        // do-whatever with your single word.

        // we got a word, so this counts as a valid line.
        ++num_lines;
    }
}

这将跳过空行,仅处理包含内容的每一行开头的单个单词。它可以进一步增强,以确保除了空格和换行符或EOF之外,读取的单词是唯一内容,但我严重怀疑你需要错误检查那个紧(或者甚至这个紧。)

示例输入

one
two
three four
five

six
seven
eight
nine
ten
eleven twelve

已处理的字词

one
two
three
five
six
seven
eight
nine
ten
eleven

fourtwelve都会被忽略,同样是fivesix之间的空白行。这是你所追求的是你的呼唤,但至少你有比以前更接近的东西。

答案 1 :(得分:2)

infile >> input不是读取输入行的正确方法。当在一行中遇到空白字符时,它会停止读取。您应该使用std::getline(infile,input)

while ( std::getline(infile, input) && num_lines < 10 ) {
      do whatever...
      num_lines++;
}