示例:
std::ifstream in("some_file.txt");
std::string line; // must be outside ?
while(getline(in,line)){
// how to make 'line' only available inside of 'while' ?
}
Do-while循环不适用于第一次迭代:
std::ifstream in("some_fule.txt");
do{
std::string line;
// line will be empty on first iteration
}while(getline(in,line));
当然,总有if(line.empty()) getline(...)
,但感觉不对。
我还想过滥用逗号运算符:
while(string line, getline(in,line)){
}
但这不起作用,MSVC告诉我,因为line
无法转换为bool。通常,以下序列
statement-1, statement-2, statement-3
应为type-of statement-3
类型(不考虑重载operator,
)。我不明白为什么那个不起作用。有什么想法吗?
答案 0 :(得分:6)
你可能会作弊,只是制造一个多余的块:
{
std::string line;
while (getline(in, line)) {
}
}
这在技术上并不是“相同的范围”,但只要外部区块中没有其他东西,它就等同。
答案 1 :(得分:3)
for循环可以工作,我一直这样做:
for (std::string line;
getline(in,line); )
{
}
答案 2 :(得分:2)
您可以使用for
循环:
for(std::string line; getline(in, line);) {
}
但是,我不认为这是非常好的风格。