代码在 Hackerrank 中运行良好,但在我的命令提示符中打印时,它给出了完全不同的输出

Code works completely fine in Hackerrank but when printed out in my command prompt, it gives complete different outputs

我是 C++ 的新手,最近我一直在学习如何使用 Vim 作为我的文本编辑器。我在 Hacker运行k 上做了一个非常基本的任务,它输入了一个 int、long、char、float 和 double,它们之间用 space 分隔,程序必须相应地输出所有值浮点值上升到小数点后 3 位,双精度值上升到小数点后 9 位。我在 Hacker运行k 上完成了代码,它工作得很好,但是当我在我自己的命令提示符下测试输入时,它输出了不同的值,这些值与它在 Hacker[=40 上输出的值不同=]k。这是我的代码。

#include <iostream>
#include <cstdio>
#include <iomanip>

using namespace std;

int main() {
    int a;
    long b;
    char c;
    float d;
    double e;

    cin >> a >> b >> c >> d >> e;
    cout << a << '\n' << b << '\n' << c << '\n';
    cout << fixed << setprecision(3) << d << endl;
    cout << fixed << setprecision(9) << e << endl;
    return 0;
}

我的输入如下: 211916801 97592151379235457 p 19856.992 -5279235.721231465

我的命令提示符中的输出是这样的:
211916801
2147483647

0.000
0.000000000

而 Hacker运行k 上的输出被接受,因为它是这样的:
211916801
97592151379235457
p
19856.992
-5279235.721231465

我用来在我的 VIMRC 中执行我的程序的绑定是这样的:
autocmd 文件类型 cpp nnoremap :w !g++ -std=c++17 -O2 -Wall % -o %:r && %:r.exe

有谁知道为什么代码在我的 Vim 上无法正常执行,但在 Hacker运行k 上运行正常?第一个整数打印正常,但在 b(长)之后,它打印出 运行dom 东西。在此先感谢您的帮助。

看起来您的代码依赖 long 占用 64 位。这通常是不正确的。例如在 32 位 vc++ 程序中它占用 32 位。因此,您应该改用 long long 或(更好的)标准库中的固定大小类型,例如 ::std::int64_t.