快速提问,
假设您被告知从文本文件中读取输入,只有10行;尽管如此,文本文件有40行。执行以下操作是不好的编程:
while ( infile >> input && num_lines < 10 ) {
do whatever...
num_lines++;
}
// closed file
infile.close();
有更好的方法吗?
我应该提到当我说&#34; line&#34;我只是说以下内容:
planet
tomorrow
car
etc
所以是的,要阅读一行文字,应该实现获取行功能
答案 0 :(得分:3)
它不会糟糕编程。您检查输入成功的效果要好于大多数新手,所以不要为此感到沮丧。但是,您当前的循环不正确。
事情错了:
试试这个:
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
four
和twelve
都会被忽略,同样是five
和six
之间的空白行。这是你所追求的是你的呼唤,但至少你有比以前更接近的东西。
答案 1 :(得分:2)
infile >> input
不是读取输入行的正确方法。当在一行中遇到空白字符时,它会停止读取。您应该使用std::getline(infile,input)
。
while ( std::getline(infile, input) && num_lines < 10 ) {
do whatever...
num_lines++;
}