是否有某种使用 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()))
注意双括号;这些用于避免编译器警告在循环条件中使用=
而不是。==
注意:我将声明留在简单的“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
.