0

我正在尝试基于 Java 资源学习一些东西,并且我想将其适应 C++。

Java的源码有:

while( !StdIn.isEmpty())
{
  //Take input from standard input, and process it...
}

在 C++ 中,我能想出的最接近的解决方案是

while( cin >> someString)
{
  //process someString...
}

但是,问题是 cin 返回对象的状态。我无法将错误的输入放入 std::string。这可能适用于整数,但不适用于字符串。任何等效功能或解决方法?

提前致谢。

4

1 回答 1

2

使用 C++ iostreams 以及 C 的 stdio,如果您尝试从中读取std::cin文件,您无法判断文件(例如/ stdin)是否为空。找出的唯一方法是实际从文件中读取,然后检查尝试是否成功。

(是的,您可以使用某种形式的peek,但这远不是惯用的或实用的。)

因此,C++ 中的标准方法可能如下所示,一次处理整行输入:

for (std::string line; std::getline(std::cin, line); )
{
    // process "line"
}

只有在您成功从输入中提取一行时,循环体才会执行。一旦输入的数据用完,就不再满足循环条件(即流不再“好”),循环停止。

相同的想法适用于 Cfgets以及未格式化的std::istream::read()andfread以及特定于平台的函数(如 Posix)read(2):您总是尝试获取输入,然后检查是否有任何输入,只有当您这样做时,您才会继续使用输入.

于 2013-09-22T21:17:00.557 回答