C ++ iostream库是一个面向对象的库,它使用流提供输入和输出功能。 iostreams类支持内置类型的类型安全I / O,并且可以通过重载>>和<<运算符来扩展以支持用户定义的类型。
std::set precision 如何影响一般浮点格式?
我正在阅读 Nicolai M. Josuttis 的“C++ 标准库 - 教程和参考”,第 15 章:使用流类的输入/输出。 在 15.7.6 浮点表示法中,有一个表
如果这之前已经发布过,我很抱歉。我开始阅读 Nicolai M. Josuttis 所著的《C++ 标准库 - 教程和参考》一书。 我现在正在阅读这一章
关于标准输入流 std::cin 及其如何解析 double 和 ints 的问题
我正在阅读编程:使用 C++ 的原理和实践。目前我正在做第三章的练习,但是有一个问题难住了我。现在我可以让代码正常工作了,但我是
我有一个浮点值列表,我想用带有两位小数的 cout 打印它们。 例如: 10.900 应打印为 10.90 1.000 应打印为 1.00 122.345 应打印为...
我有一些旧的 C 代码,我想将它们与一些 C++ 代码结合起来。 以前的C代码有以下内容: #包括 #包括 #包括 我有一些旧的 C 代码,我想将它们与一些 C++ 代码结合起来。 以前的C代码有以下内容: #include <windows.h> #include <stdio.h> #include <string.h> #include "mysql.h" 现在我正在尝试让它使用 C++ 和 iostream,如下所示: #include <windows.h> #include <stdio.h> #include <string> #include <iostream> #include "mysql.h" 但是我在编译时不断收到以下链接器错误: [链接器错误]未定义对 `std::string::size() const' 的引用 [链接器错误]未定义对 `std::string::operator[](unsigned int) const' 的引用 [链接器错误]未定义对 `std::string::operator[](unsigned int) const' 的引用 [链接器错误]未定义对 `std::string::operator[](unsigned int) const' 的引用 [链接器错误]未定义对 `std::ios_base::Init::Init()' 的引用 [链接器错误]未定义对 `std::ios_base::Init::~Init()' 的引用 ld 返回 1 退出状态 我该如何解决这个问题? 编辑:我的编译器是Dev-C++ 4.9.9.2 C string.h 标头和 C++ string 标头不可互换。 不过,总的来说,您的问题是文件已正确编译,但链接了错误的运行时库。 Dev-C++ 使用 GCC。 GCC 可以根据文件扩展名正确确定文件中的语言,但不会链接正确的运行时库,除非您特别要求它(在命令行中-lstdc++)。将 GCC 称为“g++”(或者,在您的情况下,“mingwin32-g++”)也将获得正确的语言,并将链接所需的库。 您需要链接到您的 C++ 运行时。这取决于您的平台和编译器,但将 -lc 添加到链接器命令中可能会做到这一点。 因此可能会使用您的 C++ 编译器而不是 ld 进行链接。 无论如何,如果您希望 C++ 代码正常工作,您可能必须使用 C++ 编译器而不是 ld 进行链接——通常需要异常和静态初始化程序才能正常工作... 尝试使用 Cygwin 进行编译时,我遇到了同样的错误 (g++)。 将 -L/usr/local/bin -L/usr/lib 添加到编译命令应该可以工作。 这可能是 Cygwin 特有的,但它也可能有助于解决您的问题。
我必须编写一个家庭作业程序,使用 std::cin 和 std::getline() 读取一些用户输入,但指定该程序仅在键入 EXIT 时退出。 我目前正在尝试...
我必须做一个作业程序,使用 std::getline() 读取 std::cin 中的一些用户输入,但指定程序仅在键入 EXIT 时退出 我目前正在努力获得
我已经阅读了 std::endl 和 ' 之间的区别 ' 是 std::endl 刷新缓冲区并且 ' ' 没有。然而,据我所知,linux 上的 stdout 无论如何都是行缓冲的,所以这是否意味着 std::
我正在尝试打印一个俄语“ф”(U+0444 西里尔小写字母 EF)字符,该字符的十进制代码为 1092。使用 C++,如何打印出该字符?我本以为
当我读取包含特殊字符(例如 á ó ñ ü è)的文件,然后在命令提示符中打印它们时,我遇到了问题。 在下面的示例中,读取的文件具有“正常字符...
流输出的 printf %g 标志等效(例如 std::cout)?
如果我需要打印浮点数 x 我通常使用 printf("%g", x) 因为这对我来说是最简单和最方便的以人类可读的方式输出浮点数的方法.. .
我的项目根据所选语言生成 CSV 格式的报告。我们支持 17 种语言,其中亚洲语言(例如中文/日语和韩语)无法使用。里面的内容显示出一些未知的内容
如何使用 ostream& 将文件提取的数据传递到数组中到打印函数? (C++)
我正在尝试使用两个功能 - 从文本文件读取数据并将其存储到结构体格式化的数组中 通过 ostream& 打印数组数据 常量 int 最大行数 =20; //跨3列 结构
如何使用 cout 打印 0x0a,而不是 0xa? #包括 使用 std::cout; 使用 std::endl; 使用 std::hex; int main() { 计算<< hex << showbase <<...
这个程序是用自定义类A设计的,当调用复制构造函数时输出1,当调用析构函数时输出0。我在程序里复制了两次,删除了两次,还是不行……
当我只能使用时,是否有理由将 endl 与 cout 一起使用 ?我的 C++ 书上说要使用 endl,但我不明白为什么。是 没有像 endl 那样广泛支持,或者我错过了什么?
如何通过构造函数注入std::basic_istream而不显式指定<CharT,Traits>
我正在编写模板化的 CSVParser 类,它从任何 basic_istream 对象读取数据并将其转换为给定类型的 std::tuple : 模板 类 CSVParser {
我的overflow()有什么问题吗?当我打印 oss.str() 时,它打印“Hello, Wor”而不是“Hello, World”。我做错了什么? #包括 #包括 #包括 我的overflow()出了什么问题。当我打印 oss.str() 时,它会打印 "Hello, Wor" 而不是 "Hello, World"。我做错了什么? #include <iostream> #include <vector> #include <string> #include <sstream> class io_buffer : public std::streambuf { public: io_buffer(std::ostream& os, int buf_size = 4) : os_(os), buffer(buf_size) { os_.clear(); char* beg = buffer.data(); setp(beg, beg + buffer.size()); } int_type overflow(int_type c) { if (os_ && !traits_type::eq_int_type(c, traits_type::eof())) { *pptr() = traits_type::to_char_type(c); pbump(1); if (flush()) { setp(buffer.data(), buffer.data() + buffer.size()); return c; } else return traits_type::eof(); } return traits_type::not_eof(c); } bool flush() { return os_.write(pbase(), pptr() - pbase()); } int sync() { return flush() ? 0 : -1; } private: std::ostream& os_; std::vector<char> buffer; }; int main() { std::ostringstream oss; io_buffer buf(oss); std::ostream os(&buf); std::string str("Hello, World"); os << str; std::cout << oss.str() << std::endl; } 您还需要冲洗std::vector(缓冲区),即: int_type overflow(int_type c) { if (os_ && !traits_type::eq_int_type(c, traits_type::eof())) { *pptr() = traits_type::to_char_type(c); pbump(1); if (flush()) { buffer.clear(); // <- setp(buffer.data(), buffer.data() + buffer.size()); return c; } else return traits_type::eof(); } return traits_type::not_eof(c); } 更好,因为 0x499602D2 地址建议使用 pbump(-buffer.size()) 以避免多次调用 overflow()。 问题是你使用: setp(beg, beg + buffer.size()); 并且在overflow()中添加新元素而不重新分配,结束指针应该是可访问的(如果您不想重新分配),否则您需要在overflow()中重新分配缓冲区。所以改成: setp(beg, beg + buffer.size() - 1); 在 io_buffer 构造函数中 稍后在溢出中将 setp 更改为: pbump(-(pptr() - pbase())); 还要刷新缓冲区添加 endl: os << str << endl; 工作示例: http://coliru.stacked-crooked.com/a/7c72ecfe78bb2aee
程序应读取 2 个文件(author.dat 和 itation.dat)并将它们保存到地图和集合中; 首先它毫无问题地读取引文列表,然后它似乎正确地读取了作者并且......