我的问题是,我想读取输入std::cin
但不知道输入有多长。我也必须char
并且不能使用std::string
。
我必须处理两种方法:
a) 用户输入文本,当他点击 [ENTER] 时,程序停止读取。
b) 用户重定向std::cin
到一个文件(例如.\a.oput < file
)可以容纳多行。
Edit:只是注意到 std::cin.eof() 在读取文件的情况下也始终为 false。
对于 a) 我可以一直读到 \n 出现。对于 b)Edit: No(我可以阅读直到 std::cin.eof() 发生。)
但是,当我不知道我遇到的是 a) 问题还是 b) 问题时,我怎样才能中断阅读过程呢?
这就是我所拥有的a)...
char buffer = ' ';
while(std::cin >> std::noskipws >> buffer && buffer != '\n')
{
// do some stuff with buffer
}
...和b)
char buffer = ' ';
while(std::cin >> std::noskipws >> buffer)
{
// do some stuff with buffer
}
我也知道有std::cin.tellg()
获取流中的当前位置。
Edit:所以看起来在文件的情况下输入流被终止,以这样的方式std::cin >> std::noskipws >> buffer
gets false
。
上面的代码对 a) 做了什么:
- 它等待用户输入并按[ENTER]
- 然后它循环遍历用户在最后一行输入的每个字符。
- 然后再次等待用户输入并按[ENTER]
- 无限等待处理循环
那么我该怎么做呢?
您可能要求输入始终结束 EOF(这意味着从命令行需要^D
被按下),然后像往常一样使用 b 的过程。这也将启用来自 cmdline 的多行输入
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)