Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么没有in>&燃气轮机;endl?_C++_Iostream - Fatal编程技术网

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
,但我们没有它。如果您觉得它很重要,那么您当然可以编写一份提案。