C++ 为什么没有in>&燃气轮机;endl?
当从文本文件中读取格式化输入时,没有什么比跳过行尾更自然的了C++ 为什么没有in>&燃气轮机;endl?,c++,iostream,C++,Iostream,当从文本文件中读取格式化输入时,没有什么比跳过行尾更自然的了 In.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 为什么输入流没有endl说明符?相反,我们似乎不得不使用丑陋的语言 In.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); In.ignore(std::numeric_limits::max(),'\n'); 。。
In.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
为什么输入流没有endl
说明符?相反,我们似乎不得不使用丑陋的语言
In.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
In.ignore(std::numeric_limits::max(),'\n');
。。。跳过行的末尾
In.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
。。。我们必须使用丑陋的工具
In.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
In.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
为什么输入流没有endl说明符
In.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
endl
写入换行符并刷新输出流。在我看来,跳过该行的其余部分似乎不像是一个逻辑输入流模拟
In.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
如果你有一个更好的方式来表达跳过的结束(或休息?)行的想法,那么请随意建议一个替代方案。虽然我个人欢迎您的建议,但这几乎不增加该建议被标准采纳的可能性。为此,您应该向委员会提出建议。您可以定义自己的输入流操纵器,如下所示:
In.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::istream& skip_till_endl(std::istream& in)
{
in.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return in;
}
std::istream&skip__\u endl(std::istream&in)
{
in.ignore(std::numeric_limits::max(),'\n');
返回;
}
用法示例:
In.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
$ cat main.cpp
#include <iostream>
#include <limits>
std::istream& skip_till_endl(std::istream& in)
{
in.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return in;
}
int main()
{
int i, j;
std::cin >> i >> skip_till_endl;
std::cin >> j >> skip_till_endl;
std::cout << "\n\n--- Output ---\n";
std::cout << "i=" << i << std::endl;
std::cout << "j=" << j << std::endl;
}
$ make main
g++ main.cpp -o main
$ ./main <<END
1 abc
2 def gh
END
--- Output ---
i=1
j=2
$cat main.cpp
#包括
#包括
std::istream&跳过直到结束(std::istream&in)
{
in.ignore(std::numeric_limits::max(),'\n');
返回;
}
int main()
{
int i,j;
标准::cin>>i>>跳过直到结束;
std::cin>>j>>跳过直到结束;
std::cout如这里所述:,endl
还包括输出流的刷新。它不仅仅是一个换行符。只需读取它!注意对ignore
的调用是错误的,因为它停在\n
处而不读取它。使用getline
读取一行。使用
跳过空格的输入操作,包括换行符,自动。如果你想逐行阅读,你应该使用getline
,endl
而不是你想象的那样。否则,这其实不是一个糟糕的主意。我在某处看到了一个不错的代码示例,用于从istream中提取具有结构的代码;希望我能记得它在哪里。你的意思是跳过它的结尾吗-行('\n'
)符号或行的其余部分(如基于忽略()
的示例所示)?我写的是“跳过行的结尾”而不是“行的结尾”(字符)我很清楚这一点。遗憾的是,没有一个简单的结构可以做到这一点。endl
会很优雅。@YvesDaoust我肯定你知道你的意思,但我没有,我相信其他很多人也不知道。这句话的结尾很含糊不清。我同意拥有像Le这样的东西会很好在标准库中的跳过直到_endl
,但我们没有它。如果您觉得它很重要,那么您当然可以编写一份提案。