当前位置: 首页 > 知识库问答 >
问题:

在Mingw-w64中使用%I64u得到奇怪的结果

谭翰海
2023-03-14

这是我的代码:

注意:scanf内部的\n是我防止尾随换行符问题的方法。这不是最好的解决方案,但我使用它太多了,目前它正在成为我的习惯。:-)

...

int main()
{
    unsigned long long int input[2], calc_square;

    while(scanf("\n%I64u %I64u", input[0], input[1]) == 2)
    {
        printf("%I64u %I64u\n", input[0], input[1]);

        ...

我的预期输入和程序结果是:

输入:

89 89

对于输出,它不是打印回89,而是显示以下输出:

I64u I64u

我用的是MSYS2包的g (GCC) 4.9.1。我注意到了g,因为我的代码中有一部分正在使用C STL。

已编辑:我通过使用标准%llu而不是%I64u更改了我的代码,这是我的预期输入和程序结果:

输入

89 89

对于输出,这是一个奇怪的结果:

25769968512 2337536

共有2个答案

澹台蕴藉
2023-03-14

我怀疑您一直在使用MSYS2的GCC,它不是本机Windows编译器,不支持MS特定的%I64格式修饰符(MSYS2 GCC非常像Cygwin的GCC)。

如果您想使用MinGW-w64 GCC,您应该启动mingw64_shell.bat或mingw32_shell.bat并安装相应的工具链:

pacman -S mingw-w64-i686-toolchain

或者

pacman -S mingw-w64-x86_64-toolchain

完成后,只要传递-D__USE_MINGW_ANSI_STDIO=1,您就可以在从Windows XP SP3版本开始的任何Windows版本上安全地使用这两个修饰符。

FWIW,我避免使用特定于MS的修饰符,并且总是传递-D__USE_MINGW_ANSI_STDIO=1。

最后,恼人的是,您的示例在从MSYS2 shell启动时不起作用,因为mintty不是一个合适的Windows控制台;您需要从cmd.exe运行它

太叔昆
2023-03-14

此代码错误:

while(scanf("\n%I64u %I64u", input[0], input[1]) == 2)

< code>input[0]和< code>input[1]都具有类型< code>unsigned long long,但是对于< code>scanf操作,它们需要具有类型< code>unsigned long long *(指向< code>unsigned long long的指针)。我不确定MinGW是否支持检查< code>printf和< code>scanf格式说明符,但是只要您启用适当的警告,普通GCC就能够在编译时检测到这类错误。我强烈建议总是使用尽可能高的警告级别进行编译,例如在最极端的情况下使用< code >-Wall-Wextra-Werror-pedantic 。

您需要传入这些变量的地址:

while(scanf("\n%I64u %I64u", &input[0], &input[1]) == 2)
//                           ^          ^
//                           |          |
 类似资料:
  • The project's goal is to deliver runtime, headers, and libs for developing 64 bit (x64), as well as 32 bit (x86), windows applications using gcc-4.4 or newer versions.

  • mingw-w64-build mingw-w64-build is a Bash script to build a MinGW-w64cross compiler for i686 (Win32) and x86_64 (Win64). It will build a fully statictoolchain that can compile Windows executables that

  • 问题内容: 执行以下代码时: 显示以下输出: 1.0000001 但是输出应该是 1.0000000 ,对吧?如我错了请纠正我..!! 问题答案: 对于IEEE 754标准,0.1并不是真正的“ 0.1”。 0.1编码为:(带有浮点数) 0是符号(=正) 01111011指数(= 123-> 123-127 = -4 (127是IEEE 754中的 偏差 )) 100110011001100110

  • 当试图从Hitbox API获取数据时,我得到了一个奇怪的结果。对于一个API的命令,这种情况每次都会发生,而对于另一个API的命令,这种情况只是有时发生。结果差不多是这样(这是我得到的最后一个结果): \U001F\B\0\0\0\0\0\U0003W8SμMU~S N T&N G6C$Z%9IGF[(\U0005\U000F(:6\U000F\B P C\U0015\N\U007F V\U00

  • 我刚刚注意到: 既然两者都基于V8,为什么相同的操作会产生不同的结果???

  • 我正在使用Weka Gui-Explorer,我想根据类{男性,女性}对我的数据进行分类。我使用MultiBoostAB分类器,以REPTree分类器为基础。我正在尝试使用训练集(557个实例)评估我的分类器的准确性 然后是一个具有大约300个属性的测试集(200个实例)。准确率83,5% - 167从200个实例中正确分类,kappa统计量为0,67。我保存了这个模型,并用它来预测 其他未知数据