1

是否有某种使用 c++ iostream 库的惯用表达式,类似于

while (c = getchar())

c中的成语?

注意:我将声明留在简单的“c = getchar()”以使其更通用。在实际代码中,我会将其结果与 EOF 或换行符等其他内容进行比较。

4

3 回答 3

9
#include <iostream>

int main() {
    char c;
    std::cin >> std::noskipws;
    while(std::cin >> c) {
        std::cout << c << std::endl;
    }
}
于 2013-08-16T20:53:22.500 回答
6

与 getchar() 最接近的等价物是std::istream::get()

while ((c = std::cin.get()))

注意双括号;这些用于避免编译器警告在循环条件中使用=而不是。==

于 2013-08-16T20:52:39.357 回答
0

注意:我将声明留在简单的“c = getchar()”以使其更通用。在实际代码中,我会将其结果与 EOF 或换行符等其他内容进行比较。

嗯,这不太通用。如果它是任何东西的通用版本,它通常表示一个常见错误。所有软件都应在任何地方处理 EOF 条件。

在 C++ 中,我们使用流缓冲区,它们根据成功与否比较为真或假值。没有必要使用 EOF 作为假流值,尽管您可以选择这样做。

成语 (sans bug) 将是

while ( std::cin.get( c ) )

如果您想消耗到下一个换行符并每次迭代解析一行,而无需以空行结束文件,则使用

std::string s;
while ( getline( std::cin, s ) ) {
    std::istringstream line( s );

然后您可以使用line >> x.

于 2013-08-18T00:42:17.590 回答