为什么>>没有?
Why is there no in >> endl?
当从文本文件中读取格式化的输入时,没有什么比跳过行尾更自然的了。
为什么输入流没有endl
说明符?相反,我们似乎不得不使用难看的
In.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
…跳过行尾
…我们必须使用难看的
In.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
加引号的程序不只是"跳过行尾";(字符)。它会跳过整条线。实际上,据我所知,没有更简单的方法可以跳过这一行的其余部分,但是如果您发现这一行很难看,您可以编写一个辅助函数,这样您就不需要重复这些难看的代码了。
如果您只是想跳过行字符的末尾,那么下面的内容就足够了,而且不那么难看
In.ignore(1, 'n');
为什么输入流没有endl说明符?
endl
写换行符并刷新输出流。在我看来,跳过这一行的其余部分似乎不像是逻辑输入流的模拟。
如果你有更好的方式来表达行尾(或休息?)的跳过,那么请随意提出替代方案。虽然我个人欢迎你在这里提出的建议,但这很难增加这种建议被标准通过的机会。为此,你应该向委员会提出建议。
你可以定义自己的输入流操纵符,如下所示:
std::istream& skip_till_endl(std::istream& in)
{
in.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
return in;
}
使用例子:
$ 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 << "nn--- 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
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 如果没有malloc,链表实现将失败
- 数组索引的值没有增加
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 变量没有改变?通过向量的函数调用
- 没有名称的C++模板参数
- 在线编译器中的分段C++没有打印消息
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 没有用于初始化C++中的变量模板的匹配构造函数
- 调用'begin(int [n])'没有匹配函数
- 使用C++程序合并排序没有得到正确的输出
- 为什么在这个代码结束循环中没有得到结束
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- 没有显式声明的int[]中的foreach