2013-05-01 249 views
-1

我想寫一個程序,其中用戶在程序中輸入一個整數,然後C按順序返回該整數的每個數字。爲了實現這一點,我試圖將輸入的整數除以10的因子並循環,直到我最終達到最後一位。不幸的是,我的循環存在問題。 2位數字工作正常,但3位或更多,我進入一個無限循環。任何人有什麼建議我要去哪裏錯了?WHILE循環中IF語句的問題

int main() 
{ 
    int Num; 
    int a; 
    int count=0; 

    printf("Enter an integer > "); 
    scanf("%d", &Num); 
    printf("**Digits Forward!**\n"); 

    if (Num<10) { 
     printf("Final digit: %d\n",Num); 
     printf("**Digits Reverse!**\n"); 
     printf("Final digit: %d\n",Num); 
     printf("That's all, have a nice day!\n"); 
    } ///No Problems So far. 

    else { 
     while (Num>=10) { 
      a=Num/10; 
      count=count+1; 
      if (a<10) { 
       printf("Digit: %d\n", a); 
       Num = Num-pow(10,count)*a; 
       count=0; 
      } 
     } 
    } ///Having trouble in this loop. Why doesn't it loop using the new Num and count values? 
    printf("Final digit: %d\n",Num); 

    return 0; 
} 
+1

我不驚訝,你不能自己調試這段代碼。這根本不可讀。 – 2013-05-01 00:52:50

+1

我必須誠實地同意我甚至不確定你在那裏做什麼。 – Nomad101 2013-05-01 00:54:31

+1

請通過適當縮進並添加註釋來清理代碼。閱讀未註釋的,無意義的代碼非常困難。 – templatetypedef 2013-05-01 01:01:30

回答

0

是的,你會擊中一個3位數的無限循環,而NUM在while循環中根本不會改變。根據你的邏輯,你必須使用a = a/10而不是a = Num/10,在while循環之前初始化a = Num。

順便說一句,通過使用「mod」和「division」,有更簡單的方法來做你想做的事情。

+0

我想我很困惑,因爲我認爲我在if語句中改變了Num的值,它嵌套在while循環中。 我只希望Num的值改變一次,我知道需要多少計數才能將值更改爲低於10. – iclarke85 2013-05-01 01:09:04

+0

當然,請嘗試建議並接受適合您的答案。也考慮使用mod和除法。例如:769%10給出9.(int((769/10)給出76.獲得提示?希望它有幫助 – Sudhee 2013-05-01 01:14:18

+1

@Statatak在'if'語句中更改'Num'的唯一方法是*輸入* ifblock,並且只有在出現'(a <10)'時纔會發生。你看到了嗎?(希望如此,你寫的)呃,什麼決定了'a'的值?上面的這行代碼的內容如下:'a = Num/10'。所以現在我們知道,除非'(Num/10 <10)'爲真,否則我們不輸入if塊。 「Num」的值是否正確?任何值,例如'Num <100'。因此,傳遞大於100的任何東西,if塊永遠不會執行,因此'Num'永遠不會改變,因此*無限循環*。 – WhozCraig 2013-05-01 01:41:58

2

這是你的問題:

while (Num>=10) { 
     a=Num/10; 
     if (a<10) { 

如果200進入? a將是20,並且不會輸入if語句。

我不知道你想完成什麼,但你可能會考慮:

while (Num>=10) { 
     Num=Num/10; 
     if (a<10) { 

此外,這是良好的編碼習慣在C沒有把握的變量名。

0

爲什麼不使用的sprintf轉換數(在這種情況下整數)字符數組,然後在其上遍歷像這樣的:

接受輸入並且然後使用的sprintf

int x,i=0; 
    char str[5]; // 5 digits max - but you could change it 
    printf("Enter an Integer"); 
    scanf("%d",&x); 
    sprintf(str,"%d",x); 

轉換成字符數組然後遍歷

while (str[i]!='\0') 
    { 
    \\ printing and testing here 
    }