C ++:对一个空输入vs空输入文件做出反应

时间:2012-02-12 20:32:17

标签: c++ input

我还是很陌生,所以这可能是非常简单的事情,我也可能会因为词汇而失败,但无论如何我都会问,因为我自己无法弄明白。

我正在编写一个程序,要求使用不同的命令来更改某些坐标,如果你给出一个空命令,它只需要一个新命令。问题是如果你给程序一个输入文件来读取命令 (像这样: ./myprogram<输入文件 ) 并且该文件为空,它以循环结束并无休止地请求新命令。当没有更多的输入要读取时,它应该能够退出程序。但它怎么能有所作为,因为它无法知道命令是从一个文件还是一次一个地给出?或者有没有办法让它知道?毕竟,如果他们一次一个地手动给出,一个空命令并不意味着不会有更多。我希望这听起来不是太傻......

1 个答案:

答案 0 :(得分:1)

我不完全确定"命令"是给你的,但听起来好像你正在阅读单独的行,你想排除空(或拼写错误)的行。一种简单的方法是读取行,但首先跳过前导空格直到没有其他行:

for (std::string line; std::getline(in >> std::ws, line); ) {
    process(line)
}

表达式in >> std::ws会跳过所有前导空格,即所有空格,换行符,制表符等。完成此操作后,std::getline()会读取一行的内容并将其放入{{1} }。如果在跳过前导空格后没有任何数据,line将失败,因为已达到输入行。如果std::getline()需要以某种方式解码,您可以将其放入line并从那里解码。