2014-03-01 64 views
0

我寫了這個函數來反轉一個數字。我將擁有高達2^32的測試用例。我需要函數來返回無符號整數。我的問題是:爲什麼不打印?這個C程序爲什麼不打印unsigned int?

#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; 
} 

是的,我沒有忘記原型...忍耐與我我最近一直在做Java和Lisp。但是,我的編譯器不斷給我一個警告,說我在格式字符串中有多餘的字符。它也做到這一點,如果我有型「長長整型」,我在格式字符串,我也嘗試過使用「%LLI%。

+3

您是否收到任何編譯器錯誤或警告? –

+0

它適用於我(編譯和測試)。建議你在'reverse()'後加'main()'或爲'reverse()'添加一個前向聲明。 – abligh

+2

你會得到什麼結果或問題? – aschepler

回答

2

你忘了,包括原型的功能main之前。

unsigned int reverse(unsigned int a); 
+1

但是'int'和'unsigned int'是佈局兼容的,隱式返回類型是'int',所以這應該起作用。 –

+0

@KerrekSB;取決於OP是以C89還是C99模式編譯它。 – haccks

+0

是的,的確如此。然而,在首次使用之前,只有一個聲明'unsigned int reverse();',而不是完整的原型,仍然是有效的C11。 –

0

數量大概是太巨大了你的體系結構的unsigned

記住,總是讓你的編譯器最高警告級別。這應該告訴你,在您使用它reverse不知道,要傳遞int%u格式還有你的號碼太大了。

+0

注意即使是* signed * 32位int也不會太大。雖然海報並非不可能以16位系統爲目標,但現在大多數嵌入式系統或仿真環境都可能在問題中提及。 –

+2

@Chris:你會驚訝有多少學生印度大學仍在使用16位Turbo C –

相關問題