为什么这个C程序不打印unsigned int?

时间:2014-03-01 17:07:36

标签: c printf

我写了这个函数来反转一个数字。我将有最多2 ^ 32的测试用例。我需要函数来返回无符号整数。我的问题是:为什么不打印?

#include <stdio.h>
#include <stdlib.h>
#include<string.h>

unsigned int reverse(unsigned int a);

int main(){

    printf("%u\n",reverse(987654321));
    //printf("%ui\n",reverse(987654321)); //this wont work either

    return 0;
}

unsigned int reverse(unsigned int a)
{
    int temp=0;
    while(a>0)
    {
        temp=10*temp+a%10;
        a/=10;
    }
    return temp;
}

是的,我确实忘记了proto-type ...跟我一起,我最近一直在做Java和Lisp。但是,我的编译器不断给我一个警告,说我在格式字符串中有额外的字符。如果我有类型“long long int”并且我在格式字符串中使用“%lli%”,它也会这样做,我也尝试过。

2 个答案:

答案 0 :(得分:2)

您忘记在main之前为您的函数添加原型。

unsigned int reverse(unsigned int a);

答案 1 :(得分:0)

对于您的架构上的unsigned,该数字可能太大了。

请记住始终为编译器启用最大警告级别。这应该告诉您reverse在您使用它的地方不知道,您将int传递给%u格式,并且您的号码太大了。