打印一个值会使程序运行吗?

时间:2013-05-18 15:22:42

标签: c++

#include <iostream>
#include <cstdio>

using namespace std;

bool numar(unsigned long long n)
{
    return (n > 99) && ((n % 100) == 25);
}

int main()
{
    freopen("numere.in", "r", stdin);
    freopen("numere.out", "w", stdout);

    int cnt = 0;

    unsigned long long n, a, Nblabla, N;

    while (scanf("%d", &n) == 1)
    {
        if (numar(n))
        {
            a = (n - 25) / 100;

            cout << a; // This son of a *****.

            for (N = 1; true; N++)
            {
                Nblabla = N * (N + 1);

                if (Nblabla > a)
                    break;
                else if (Nblabla == a)
                {
                    cnt++;
                }
            }
        }
    }

    printf("%d", cnt);

    return 0;
}

简单地说,如果我评论该行(cout << a;),程序就会停止工作。如果我把它留在那里,它就有效 我正在使用Code :: Blocks,GNU GCC。

这只是检查数字是否是以数字5结尾的数字的平方。 (基数10)(我不允许使用平方根)

在问之前,不,这不是功课。这是我对在线竞赛主题的提交。

谁能告诉我为什么会这样?

1 个答案:

答案 0 :(得分:1)

使用%d格式,scanf会尝试读取指向int的指针。但是&n是指向unsigned long long的指针。这会导致未定义的行为,这可能是您出现奇怪结果的原因。

正确的格式为%llu