草庐IT

prinf-cout

全部标签

c++ 将 printf 与 wprintf 混合(或将 cout 与 wcout 混合)

我知道您不应该将打印与printf,cout和wprintf,wcout混合使用,但是很难找到一个好的答案,为什么以及是否可以绕过它。问题是我使用了一个用printf打印的外部库,而我自己使用了wcout。如果我做一个简单的例子,它工作正常,但从我的完整应用程序来看,它根本不打印printf语句。如果这真的是一个限制,那么就会有许多库无法与广泛的打印应用程序一起工作。我们非常欢迎对此有任何见解。更新:我把它归结为:#include#include#include#include#includeintmain(){char*buf;std::wcout所以我想这可能是冲水问题,但我还是觉

c++ - 限制 std::cout 中 boost::options_description 中默认值的精度

当我构建一个boost::options_description实例时options.add_options()("double_val",value(&config.my_double)->default_value(0.2),"it'sadouble");然后想自动输出可用于我的程序的选项,然后把std::cout默认值0.2显示的精度太高,当我有长变量名时,这会有效地扰乱我的输出:--double_val(=0.20000000000000001)it'sadouble不幸的是,之前对std::cout.precision的调用没有帮助:cout.precision(5);std

C++ cout 副作用排序

假设如下一段代码:#includeusingnamespacestd;charone(){cout执行标记为1和2的行,用ideone编译会做同样的事情,它打印如下:twoone12在我看来,我们在这里观察到的是未指定的行为,因为解析函数参数的顺序是未指定的。这是面试中的一道题,打印上面给定的序列(没有任何替代)应该是正确答案,但它真的正确吗? 最佳答案 你是对的,面试官表现出对语言及其规则缺乏理解的可怕普遍现象。这两行是严格等价的,当且仅当operator为第一行调用的总是一个自由函数(标准说它们是)。正如您所想的那样,函数调用之

c++ - cout 和 cin 不是函数,那么它们是什么?

一般在C语言中我们认为printf和scanf是函数。当谈到cout和cin时,在C++中它们是什么?我的意思是它们不能是函数,因为它们后面没有括号,所以它们不是函数。那么什么是cout和cin是标准输入输出函数?还是别的? 最佳答案 std::cout和std::cin是类的全局对象std::ostream和std::istream他们分别重载了运算符和>>.你应该阅读operatoroverloading.cout这就像一个函数调用;该函数是一个重载运算符和一个快捷方式:cout.operator或者这个:operator取决于

c++ - 如何将ostringstream直接写入cout

如果我有一个std::ostringstream对象称为oss,我明白我能做到std::cout打印出字符串。但是做oss.str()将导致返回的字符串被复制。有没有办法直接打印底层streambuf?提前致谢! 最佳答案 如果您使用std::ostringstream则不会.无法从中读取底层缓冲区(因此ostringstream中的o),因此您必须依靠实现来为您完成,通过str()。但是,如果您使用std::stringstream(注意缺少o),那么底层缓冲区是可读的,并且basic_ostream有一个特殊的重载用于从缓冲区读

c++ - cout << setw 没有与 åäö 正确对齐

以下代码重现了我的问题:#include#include#includevoidp(std::strings,intw){std::cout这会产生以下输出:COL_ACOL_BCOL_CABCÅÄÖABC如果我将代码中的“ÅÄÖ”更改为例如“ABC”,然后它起作用了:COL_ACOL_BCOL_CABCABCABC为什么会这样? 最佳答案 除了为std::wcout注入(inject)适当的语言环境外,您可能还必须切换到宽字符串。例如:voidp(std::wstrings,intw){std::wcoutDemo

C++,三元运算符,std::cout

如何使用C++使用三元运算符编写以下条件intcondition1,condition2,condition3;int/doubleresult;//intordouble....std::cout 最佳答案 取决于什么类型是result1、result2等表达式C?expression1:expression2并非对所有类型的expression1和expression2都有效。粗略地说,它们必须可以转换为通用类型(可以在标准中阅读确切的规则和异常(exception)情况)。现在,如果result是字符串,那么您可以这样做:st

c++ - 如何为 std::cout 制作可变参数宏?

我如何制作一个宏,它接受可变数量的参数,并使用std::cout打印出来?抱歉,如果这是一个新手问题,在搜索答案后找不到任何可以阐明可变参数宏的内容。概念示例:#include#defineLOG(...)std::cout会输出:exampleoutputfillertext 最佳答案 您不需要预处理器宏来执行此操作。可以写成普通的C++。在C++11/14中:#include#includevoidlog(){}templatevoidlog(First&&first,Rest&&...rest){std::cout(first

c++ - cout 不能作为 Windows 7 上的 Visual C++ Express 2010 的普通用户使用

这是代码:#includeintmain(){usingnamespacestd;cout如果我在Windows7中使用VisualExpress2010以管理员身份构建上述代码,然后以普通用户身份在cmdshell中运行生成的可执行文件,它会打印预期的输出。如果我清理并构建与普通用户相同的代码,然后以普通用户身份在cmdshell中运行生成的可执行文件,它不会打印任何内容。关于为什么会发生这种情况有什么想法吗? 最佳答案 我没有确切的答案,但我会尽力提供帮助。1)作为普通用户,右键单击VisualStudio命令提示符,然后单击以

c++ - cout流的限制?

一个让我印象深刻的谜题。在一些简单的测试工具代码中,如果我将太多字符流式传输到标准输出,程序就会失败。奇怪但非常可重现。这可能是Windows独有的问题,但很容易看出:#include#includeusingnamespacestd;intmain(){dequed;charc;while(cin.get(c))d.push_back(c);for(deque::reverse_iteratorj=d.rbegin();j!=d.rend();j++)cout前面的代码只是从stdin加载一个字符流并以相反的顺序输出它们。它适用于最多100K左右的字符,但对于更大的文件,它会在Win