"while (c = getchar())" C++ 中的等效项

"while (c = getchar())" equivalent in c++

本文关键字:C++ getchar while      更新时间:2023-10-16

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

while (c = getchar())

c中的成语?

注意:我将语句简单地保留为"c=getchar()",以使其更通用。在实际代码中,我会将其结果与EOF或换行符等其他内容进行比较。

#include <iostream>
int main() {
    char c;
    std::cin >> std::noskipws;
    while(std::cin >> c) {
        std::cout << c << std::endl;
    }
}

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

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

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

注意:我将语句简单地保留为"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提取项目。