Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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++ 我应该使用wsprintf()将double打印为宽字符串吗?_C++_Visual Studio - Fatal编程技术网

C++ 我应该使用wsprintf()将double打印为宽字符串吗?

C++ 我应该使用wsprintf()将double打印为宽字符串吗?,c++,visual-studio,C++,Visual Studio,我无法使用wsprintf()打印double值。 我尝试了sprintf(),效果很好 用于wsprintf()和sprintf()的语法如下: wsprintf(str,TEXT("Square is %lf "),iSquare); // Does not show value sprintf(str," square is %lf",iSquare); // works okay 在使用wsprintf()时,我是否犯了任何错误?可能您没有编译为UNICODE,文本仅定义为常规字符

我无法使用
wsprintf()
打印
double
值。 我尝试了
sprintf()
,效果很好

用于
wsprintf()
sprintf()
的语法如下:

wsprintf(str,TEXT("Square is %lf "),iSquare); // Does not show value

sprintf(str," square is %lf",iSquare);  // works okay

在使用
wsprintf()
时,我是否犯了任何错误?

可能您没有编译为UNICODE,文本仅定义为常规字符串。

wsprintf
不支持浮点。请参见其-
lf
未作为有效的格式代码列出


VisualStudio标准库的功能部分就是您想要的。它支持sprintf所支持的所有格式代码。

wsprintf
不支持浮点。错误在于使用它

如果您需要类似于
sprintf
的内容,但对于宽字符/字符串,则需要
swprintf

实际上,由于您使用的是
TEXT
宏,因此您可能希望使用
\u stprintf
来代替它:它将与
TEXT
用于决定字符串是窄还是宽的预处理器宏同步,从窄到宽实现。然而,这种方法在很大程度上是从微软仍然销售和支持基于32位NT内核和16位内核的Windows版本的时代遗留下来的。16位版本只有极少量的宽字符支持,因此Microsoft努力允许编译单个源代码库以使用窄字符(针对16位内核)或宽字符(针对32位内核)。16位内核已经过时很久了,几乎没有人有足够的理由再支持它们了


值得一提的是:
wsprintf
几乎完全是一件历史文物。
w
显然代表
Windows
。它早在(回到16位时代)就作为Windows的一部分被包括在内。它是在不支持浮点的情况下编写的,因为当时Windows没有在内部使用任何浮点——这就是为什么它有内置的例程,尽管对浮点执行(大致)相同的操作非常简单。

函数
wsprintf()
不支持浮点参数,如果使用浮点值,请尝试使用
swprintf()


有关swprint的更多信息,请参见是否
str
是宽字符串?@PascalCuoq:在此上下文中,是一个扩展为
L
的Windows(Microsoft)宏。相当冗长且容易出错。
“%Lf”
用于
长双参数。对双参数使用普通的
“%f”
。在标准C++中,我不确定<代码> %%f”是否有效,因为答案是错误的,所以我否决了。但是看起来您并没有花太多精力去了解
wsprintf()
。您是对的,我没有研究wsprintf。显然,OP也没有。我猜错了;我将留给后代。见鬼,它运行在许多根本没有浮点硬件的系统上。即使是Windows95也支持80386而没有387 FPU。是的,它可以工作。我使用了“\u stprintf\u s”这种方法正是我想要的。谢谢你的帮助。“它早在(至少回到Windows 2.1,可能是Windows 1)时就作为Windows的一部分被包括在内了。”不是这样。它最初是在Windows 3.0中提供的,而不是Windows 2.x或1.x。@raymai97:我不得不相信你的话。我在32位之前的Windows 3或4版本上丢失了所有文档……我建议OP完全删除
文本
T
宏,除非源代码与90年代早期的Windows版本兼容确实是一项要求。