输出错误或从stdin读取,C ++

时间:2015-01-08 03:39:28

标签: c++

我的节目:

int main() {  
    int t;
    cin >> t;
    while (t--) {
        int a, b;
        cin >> a >> b;

        printf("%i, %i\n", a, b);
    }   

    return 0;
}

为什么我的输出是:

551124992, 551129087
2147483647, 551129087
2147483647, 551129087
...

如果输入为:

81
551124992 551129087
2205057024 2205061119
4204900352 4204904447
2341777408 2341781503

我希望看到不同的回应:

551124992, 551129087
2205057024, 2205061119
4204900352, 4204904447
...

但如果我的输入是

2
12 15 
2 3 

我有正确的输出:

12, 15 
2, 3 

我不明白,出了什么问题。这是一个演示:https://ideone.com/izmRCn

2 个答案:

答案 0 :(得分:4)

这些数字太大而无法放入int(假设32位int,如Windows):

81
551124992 551129087
2205057024 -> 2205061119 <-
4204900352 -> 4204904447 <-
2341777408 -> 2341781503 <-

可以存储在32位int中的最大值是2147483647。

使用long long

答案 1 :(得分:1)

您在演示中使用long long,但其格式说明符无效。它应该是%lli,而不仅仅是%i

// This is copied from your demo:
while (t--) {
    long long a, b;
    cin >> a >> b;
    // This is modified
    printf("%lli, %lli\n", a, b);
    //       ^^    ^^
}

Demo (forked from your code).