我是C++的新手,最近我一直在学习如何使用Vim作为我的文本编辑器。我在Hackerrank上做了一个非常基本的任务,它输入一个int、long、char、float和double,它们之间有一个空格分隔,程序必须相应地输出所有的值,浮动值达到小数点3位,双到9位小数位。我完成了Hackerrank本身上的代码,它运行得非常好,但是当我在自己的命令提示符中测试输入时,它输出的值与它在Hackerrank上输出的值不同。这是我的密码。
#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
虽然Hackerrank上的输出是这样被接受的:
211916801
97592151379235457
P
19856.992
-5279235.721231465
我在VIMRC中执行程序时使用的绑定如下:
自动cpp文件类型cpp nnoremap :w !g++ -std=c++17 -O2 -Wall % -o %:r & %:r.exe
有谁知道为什么代码在我的Vim上没有正确执行,但是在Hackerrank上运行时却运行得很好?第一个整数打印得很好,但在b (long)之后,它打印出随机的东西。提前谢谢你的帮助。
发布于 2020-08-31 03:14:49
看起来您的代码依赖于long
来占用64位。这往往是不真实的。例如,在32位vc++程序上,它占用32位。因此,您应该使用long long
,或者(更好的)标准库中的固定大小类型,例如::std::int64_t
。
https://stackoverflow.com/questions/63669700
复制相似问题