我现在已经学习了很长一段时间。我下载了Visual Studio,这对我来说很新用(通常我使用Code :: Blocks)来编译程序。这是我的问题,我只写了一个基本代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
printf("Hello World!\n");
printf("How are you doing?\n");
printf("Put in your ID: ");
scanf("%d", &a);
printf("Your ID is: %d\n",a);
return 0;
}
当我以它为例时;输入身份证号码:1234567890, 它显示1234567890完全相同。
但是当我输入更长的号码时:12345678900, 它显示3755744308。
我忘记了或者无法弄清楚代码或程序有什么问题,所以我想要求建议。
谢谢
答案 0 :(得分:1)
int
是4字节长的数据类型。数字12345678900
以十六进制表示为0x2DFDC1C34
,可以看出占用的字节数超过4个字节。因此它被截断为4个字节0xDFDC1C34
,其精确到十进制3755744308
。
答案 1 :(得分:0)
你有整数溢出。如果您输入的数字不适合int
数据类型,则会将其截断为可能的最大int
值。
如果您想输入非常大号,请使用unsigned long long
或long long
或unsigned long
。
(这是C ++,而不是C,但它很容易理解)
#include<iostream>
#define B_N 1e20
using namespace std;
int main() {
uint64_t uint;
int64_t i64;
unsigned long long ull;
unsigned long ulong;
long long ll;
long l;
int i;
uint=B_N;
i64=B_N;
ull=B_N;
i=B_N;
ulong= B_N;
ll=B_N;
l=B_N;
cout<<"uint64_t: "<<uint<<endl;
cout<<"int64_t: "<<i64<<endl;
cout<<"ull: "<<ull<<endl;
cout<<"ulong: "<<ulong<<endl;
cout<<"long long: "<<ll<<endl;
cout<<"long: "<<l<<endl;
cout<<"int: "<<i<<endl;
return 0;
}
例如,Codepad会显示许多溢出警告。