2015-01-04 56 views
0

我寫這個程序將十進制整數轉換爲二進制格式。但是,當我輸入的輸入大於3時,程序就會掛起。我在做什麼錯誤?爲什麼這個程序沒有給出大於3的任何值的輸出?

#include<stdio.h> 
int main() 
{ 
    int num,q,r,bin=0,i=1; 
    printf("Enter a number:\t"); 
    scanf("%d",&num); 
    while(q>1){ 
     q= num/2; 
     r= num%2; 
     bin=(r*i)+bin; 
     i*= 10; 
    } 
    bin=(1*i)+bin; 
    printf("\nThe binary equivalent is: \t%d",bin); 
    return 0; 
} 

回答

3

兩件事情:

while(q>1){ 
    q= num/2; 
  1. 你沒有初始化q,它可能會或可能不會進入while循環。
  2. 如果num僅爲4,那麼q將始終評估爲2,並且永遠不會結束並導致無限循環。所以你應該檢查num > 0而不是q > 1num = num /2。是這樣的:

    while(num>0){ 
        r = num%2; 
        num = num/2; 
        bin=(r*i)+bin; 
        i*= 10; 
    } 
    printf("\nThe binary equivalent is: \t%d",bin); 
    
+0

如何將這項工作?只是通過一些'num',看看你是否得到二進制等效的 – Gopi

+0

我試過[這裏](http://www.tutorialspoint.com/compile_c_online.php)我不知道這是否會留給你。但我建議你也試試。 – SMA

+0

我測試了我的代碼,它工作正常,我想知道這項工作如何嘗試它,但它沒有按預期工作 – Gopi

2
int q; 

使用未初始化的變量未初始化導致不確定的行爲像

while(q>1){ 

檢查下面的代碼:關於你的代碼

#include<stdio.h> 
int main() 
{ 
    int num,r,q,i=0; 
    int a[20]; 
    printf("Enter a number:\t"); 
    scanf("%d",&num); 
    while(num>0){ 
     r= num%2; 
     num= num/2; 
     a[i++] = r; 
    } 
    for(q=i-1;q>=0;q--) 
    printf("%d",a[q]); 
    return 0; 
} 
相關問題