为什么赢了';这个C程序是否打印无符号整数?
我写这个函数是为了反转一个数字。我将有多达2^32的测试用例。我需要函数返回无符号整数。我的问题是:为什么不打印为什么赢了';这个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
#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。