C程序:输入数字,不同的输出数字

时间:2015-03-02 18:23:28

标签: c

我现在已经学习了很长一段时间。我下载了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。

我忘记了或者无法弄清楚代码或程序有什么问题,所以我想要求建议。

谢谢

2 个答案:

答案 0 :(得分:1)

在您的情况下,

int是4字节长的数据类型。数字12345678900以十六进制表示为0x2DFDC1C34,可以看出占用的字节数超过4个字节。因此它被截断为4个字节0xDFDC1C34,其精确到十进制3755744308

答案 1 :(得分:0)

你有整数溢出。如果您输入的数字不适合int数据类型,则会将其截断为可能的最大int值。

如果您想输入非常大号,请使用unsigned long longlong longunsigned 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会显示许多溢出警告。