为什么赢了';这个C程序是否打印无符号整数?

为什么赢了';这个C程序是否打印无符号整数?,c,printf,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",reve

我写这个函数是为了反转一个数字。我将有多达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;
}
#包括
#包括
#包括
无符号整数反转(无符号整数a);
int main(){
printf(“%u\n”,反面(987654321));
//printf(“%ui\n”,反向(987654321));//这也不行
返回0;
}
无符号整数反转(无符号整数a)
{
内部温度=0;
而(a>0)
{
温度=10*温度+a%10;
a/=10;
}
返回温度;
}

是的,我确实忘记了原型。。。我最近一直在做Java和Lisp。然而,我的编译器不断给我一个警告,说我的格式字符串中有额外的字符。如果我键入“long long int”并在格式字符串中使用“%lli%”(我也尝试过),它也会这样做。

您忘记在
main
之前包含函数的原型

unsigned int reverse(unsigned int a);

对于架构上的
未签名的
,这个数字可能太大了


请记住始终为编译器启用最大警告级别。这应该告诉您,
reverse
不知道您在哪里使用它,您正在向
%u
格式传递一个
int
,并且您的数字太大。

您是否收到任何编译器错误或警告?它对我有效(已编译和测试)。但是,建议您将
main()
放在
reverse()
之后,或者为
reverse()
添加一个正向声明。您得到了什么结果或问题?使用
printf(“%u\n”,reverse(987654321))
的结果(编译或运行时)是什么“不够描述性-发布发生的事情。但是
int
unsigned int
是布局兼容的,并且隐式返回类型是
int
,因此这应该可以工作。@KerrekSB;取决于OP是在C89还是C99模式下编译。是,为true。但是,只有一个声明,
unsigned int reverse(),C11仍然有效首次使用前,而不是完整的原型。请注意,即使是签名的32位int,数字也不会太大。虽然这并非不可能,但海报的目标是16位系统,今天存在的大多数环境都是嵌入式或仿真环境,问题中可能已经提到了这些环境。@Chris:你会惊讶地发现,例如印度大学有多少学生仍在使用16位Turbo C。