iostream 相关问题

C ++ iostream库是一个面向对象的库,它使用流提供输入和输出功能。 iostreams类支持内置类型的类型安全I / O,并且可以通过重载>>和<<运算符来扩展以支持用户定义的类型。

如何处理 windows.h 中的 max 宏与 std 中的 max 冲突?

所以我试图从 cin 获取有效的整数输入,并使用了这个问题的答案。 它建议: #include // 包含定义 min() max() 的 WinDef.h #包括 所以我试图从 cin 获取有效的整数输入,并使用了这个问题的答案。 推荐: #include <Windows.h> // includes WinDef.h which defines min() max() #include <iostream> using std::cin; using std::cout; void Foo() { int delay = 0; do { if(cin.fail()) { cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } cout << "Enter number of seconds between submissions: "; } while(!(cin >> delay) || delay == 0); } 这在 Windows 上给我一个错误,说 max 宏不接受那么多参数。这意味着我必须这样做 do { if(cin.fail()) { cin.clear(); #undef max cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } cout << "Enter number of seconds between submissions: "; } while(!(cin >> delay) || delay == 0); 让它发挥作用。这实在是太难看了;有更好的方法来解决这个问题吗?也许我应该存储 max 的定义,然后重新定义它? 定义宏NOMINMAX: 这将抑制 Windef.h 中的最小和最大定义。 只需将函数名称括在括号中即可: (std::numeric_limits<size_type>::max)() 在这种情况下不需要 NOMINMAX 宏,而且您不会收到编译器警告 如果您不知道其他人是否可能包含 windows.h 而没有 NOMINMAX,您可以定义一个虚拟宏,可用于在不更改定义的情况下抑制类似函数的宏调用: #define DUMMY ... std::numeric_limits<std::streamsize>::max DUMMY () 也不是很漂亮,但是有效并且不具有干扰性。 在使用 Windows 头文件时,我更喜欢通过仅将其包含在专门的代码和头文件中(如果需要,使用 pimpl)来尽可能隐藏它,因为它会向全局命名空间中抛出太多垃圾。 您只是想刷新 cin 缓冲区吗?我总是只用: cin.ignore(cin.rdbuf()->in_avail()); 如果您碰巧使用 GDI+,则使用 NOMINMAX 的方法对您不起作用,因为 GDI+ 的标头需要全局命名空间中的 min 或 max。 在这种情况下,最简单的解决方法是在不再需要 min/max 时取消定义它们。 说明该方法的代码示例: //#define NOMINMAX - this won't work #include <Windows.h> #include <gdiplus.h> #undef max #undef min ... #include <cxxopts.hpp> 我来这里寻找 windows.h 定义的常见事物列表,经过多次搜索,我找到了 min、max、small、near、far。希望这对其他人也有帮助。 我意识到这个问题已经有 10 年历史了,但没有人给出明显的解决方案,所以这是我处理这个问题的方法。 所有操作系统特定的内容都放在一个翻译单元(一个 CPP 源文件)中,该翻译单元为项目的其余部分提供了更清晰的 API,因此 windows.h 永远不会污染项目的其余部分。操作系统的任何句柄都只是一个“NativeHandle”,其类型定义为 void*;有些东西是以这种方式进行堆分配的,否则可能不需要这样做,但这并不是什么坏处,考虑到这也为移植到其他平台提供了单一源点。 #include <Windows.h> #ifdef max # undef max #endif //...

回答 7 投票 0

在 C++ 中读取 .txt 文件时出现问题 [已关闭]

我需要创建一个读取 .txt 文件的程序。该程序应该逐行读取我的文件。问题是我不知道如何调用我的 .txt 文件并逐行读取文件的内容...

回答 1 投票 0

标准无操作输出流

有没有办法创建一个基本上不执行任何操作的ostream实例? 例如 : std::ostream dummyStream(...); 虚拟流 << "Nothing will be printed"; I could just creat...

回答 8 投票 0

为什么IO库和诊断库要使用继承?

C++ 标准库的大部分内容都使用模板而不是继承来实现多态性。这是一个关于原因的众所周知的话题²。还有数百个视频和博客文章

回答 1 投票 0

在 Fstream C++ 中读写文件

我正在编写一个基本的待办事项应用程序来读取文本文件和向文本文件写入注释。我的代码的问题是它不会在我的文件中读取或写入空格,就像我添加一个像“hello world”这样的待办事项,...

回答 1 投票 0

std::wofstream 将停止在非 ASCII 上写入

我正在尝试将扩展字符写入文件。 我的方法是使用 std::wofstream,但以下代码将写入“foo”并停在那里(它不写入小,也不写入条)。 #

回答 1 投票 0

C++ 中的彩色输出

有没有办法使用 iostream 和 Xcode 打印彩色输出?例如,我希望能够打印 Hello World!与你好红色,世界蓝色和!黄色的。我怎样才能做到这一点?

回答 4 投票 0

如何使用setw在我的号码前面输出“$”字符

#包括 #包括 使用 std::cout; 使用 std::fixed; 使用 std::showpoint; 使用 std::set precision ; int main() { 双数 = 85495.5432334; 计算<< fi...

回答 1 投票 0

Xcode 11.1:找不到 iostream' 文件

我刚刚将 MacBook Pro 更新到 macOS Catalina 10.15,并尝试编译并运行 C++ 命令行程序,但遇到了以前版本中不存在的问题; 这只是代码...

回答 5 投票 0

cout 和字符串文字与 int 的连接

我刚刚复习我的 C++。我尝试这样做: #包括 使用 std::cout; 使用 std::endl; 无效 printStuff(int x); int main() { 打印东西(10); 返回0; } 无效打印...

回答 3 投票 0

STM32 C++ 和将 std::cout 重定向到 UART

我在尝试使用 STM32CubeIDE(通常是 STM32CubeIDE 的标准安装)在 STM32 上运行 std::cout 时遇到问题。 我查看了许多有关重定向的资料...

回答 2 投票 0

用 C++ 打印带一前导零的指数表示法

我正在生成一个用作 FORTRAN 输入文件的文本文件。 FORTRAN 程序指定它读取的值必须采用以下格式: 1.0 必须打印为 0.1000000E+01 自...

回答 4 投票 0

使用 Interlisp Medley 将文本 I/O 流写入文件

我正在尝试将文本流写入 Interlisp、Medley 中的文件。我到处搜索(网上和书本上)但找不到Interlisp中I/O流文件操作的可行命令。 T...

回答 1 投票 0

执行cpp代码时无法显示重音符号

为了好玩,我使用 Cesar 轮在 cpp 中编写了一个简单的代码来加密消息,但是当我使用一些 wstring、wcin 和 wcout 时,我无法显示重音符号和非 ASCII 字符,我还使用了该库

回答 2 投票 0

如何打印文件内容? C++ 文件流

我正在使用 fstream 和 C++,我希望我的程序做的就是将 .txt 文件的内容打印到终端。可能很简单,但是我在网上查了很多东西都找不到

回答 3 投票 0

像读取数组一样读取文件而不复制到数组中?

我的 ASCII 文件大小为 100 到 400 MB。 我想逐字节读取它们,就像读取数组一样。所以我可以像 if (file[pos] == ) ETC。 不过,我还有...

回答 1 投票 0

如何在g++中打印__int128?

我在我的 C++ 程序中使用 GCC 内置类型 __int128 来处理一些事情,没有什么真正重要的,至少不足以证明仅为此而使用 BigInt 库,但是,足以预防......

回答 8 投票 0

下面关于cin的unsetf()方法的说法是什么意思?

在 Bjarne Stroustrups 使用 C++ 的原理和实践的第 11.2.1 章中,他展示了以下示例: cin.unsetf(ios::dec);  // 不要假设十进制(这样 0x 就可以表示十六进制) cin.unsetf(ios::oct...

回答 1 投票 0

如何在没有科学记数法或尾随零的情况下将浮点数输出到cout?

在 C++ 中输出没有科学记数法或尾随零的浮点数的最优雅的方法是什么? 浮动a = 0.000001f; 浮点数 b = 0.1f; 计算<< "a: " << a << e...

回答 3 投票 0

打印浮点数时如何删除尾随零?

我想问如何去掉小数点后面的零? 我读过很多有关它的主题,但我不太清楚它们。你能告诉我一些简单的理解方法吗? 例如...

回答 6 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.