在.c

2017-11-18 110 views
-1

一個簡單的印刷錯誤我只是寫一個程序來更改十進制數到另一個基地(2 < =基數< = 16)。
運行該程序並打印正確的答案後,我遇到一個錯誤消息:「程序已停止工作」。你可以看看我的代碼,並找到它掛在哪裏??? !!!我真的很困惑。
這是我的代碼:在.c

int decimal, radix, pow = 1, temp; 
printf("enter your number and the 2 <= radix <= 16\n"); 
scanf("%d%d",&decimal, &radix); 
temp = decimal; 
for(; temp >= radix; temp /= radix)// finding the greatest exponent of radix in decimal 
    pow *= radix; 
while(pow >= 1){ 
    decimal -= temp * pow; 
    if(temp == 10) 
     printf("A"); 
    else if(temp == 11) 
     printf("B"); 
    else if(temp == 12) 
     printf("C"); 
    else if(temp == 13) 
     printf("D"); 
    else if(temp == 14) 
     printf("E"); 
    else if(temp == 15) 
     printf("F"); 
    else 
     printf("%d",temp); 
    pow /= radix; 
    temp = decimal/pow; 
} 
puts(""); 

我認爲這個問題是因爲「TEMP =十進制/ POW」,但我怎麼能解決這個問題的?

+0

年底計算temp = decimal/pow;有簡單的十進制轉換到另一個基站的方式。在'pow = 0'時檢查是否將'decimal'分開。 – coderredoc

+2

問題是在循環的最後一行用**除**。 –

+0

I.e. 'pow/= radix'的最後一個分區導致'pow'被置爲* 0 *,'temp = decimal/pow'具有未定義的行爲。 –

回答

2

檢查pow爲0,當你在while循環

pow /= radix; 
    if (pow > 0) 
    { 
     temp = decimal/pow; 
    } 
+0

哦,我明白了。非常感謝你 。是零劃分還撫摸着我的腦海,但我無法找到它等於零的地方。畢竟,調試自己的程序非常困難。 – alirezafnatica