2016-10-02 12 views
0

// "bin"の値を入力した後、出力が得られません。これで私を助けてください。私は "bin = bin/10;"を追加しました。まだ問題は解決されていません。私はバイナリから10進への変換のためにこのコードを書いていますが、出力は得られません。

#include<stdio.h> 
#include<math.h> 

int main() 
{ 
    int ar[20],bin,i=0,sum=0,j,c; 
    printf("Enter a Binary number\n"); 
    scanf("%d",&bin); 
    while(bin!=0||bin!=1) 
    { 
     c=bin%10; 
     ar[i]=c; 
     i++; 
    } 
    ar[i]=c; 

    for(j=0;j<=i;j++) 
    { 
     sum=sum+(ar[j]*pow(2,j)); 
    } 
    printf("%d",sum); 
    return 0; 
} 

更新:whileループは次のようになります。

bin!=0 || bin!=1 

が常に評価するよう

while(bin!=0||bin!=1) 
    { 
     c=bin%10; 
     ar[i]=c; 
     bin=bin/10; 
     i++; 
    } 
+0

すべての 'ar'要素は、' bin'が決して変更しないのと同じ値を割り当てられます。 – alk

+0

あなたのタイトルは、 '1001'や出力:' 9'のような入力を示唆しています。それはあなたが欲しいものですか?その場合、あなたのプログラムはそれとはかけ離れています。 – 4386427

+0

私はCODE、plsチェックを再度更新しました。 –

答えて

2

このライン

while(bin!=0||bin!=1) 

は、無限ループが発生しますtrue件すなわち||

の利用O:binは常に1

例とは異なる0 又は異なるのいずれかであろう。

binが2の場合、両方の部分がtrue

あろう

binが1の場合、最初の部分はtrueになり、またはのためtrueになります。)

binが0の場合は最初の部分はfalseになりますが、2番目はtrueになり、あなたはたぶん、あなたが望んでいたと、すなわち&&、代わりに起因するか(||

trueを取得||

さらに、ループ内のbinの値を変更する必要があります。そうしないと、無限ループが発生します。

タイトルからは、現在のコードとはまったく異なるものが必要なようです。おそらく次のようなものでしょう:

#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
    char input[100]; 
    int value = 0; 

    printf("Input a binary: "); 
    if (fgets(input, 100, stdin) == NULL) // Read a whole line of input 
    { 
    printf("error\n"); 
    return 0; 
    } 

    char* t = input; 
    while (*t == '0' || *t == '1') // Repeat as long as input char is 0 or 1 
    { 
    value = value*2;    // Multiply result by 2 as this is binary conversion 
    value = value + *t - '0';  // Add value of current char, i.e. 0 or 1 
    ++t;       // Move to the next char 
    } 

    printf("Decimal value: %d\n", value); 

    return 0; 
} 
+0

&&も動作していません –

+1

@RohitVishwakarma - 次に1つ以上のバグがあります;-) – 4386427

+0

あなたのPCに自分のコードをコピーして実行しようとしますか? –

0

あなたのコードは無限ループになります。

while(bin!=0||bin!=1) 
{ 
    c=bin%10; 
    ar[i]=c; 
    i++; 
} 

あなたは、私はあなたのコードを編集した

bin = bin/10; 

としてビンのあなたの値を更新する必要があります。限り(bin!=0||bin!=1)として真である

whileループべきループ:ここで、もう一度、

[OK]を[コメントのためにあまりにも長い]

#include<stdio.h> 
#include<math.h> 
int main() 
{ 
int ar[20],bin,i=0,sum=0,j,c; 
printf("Enter a Binary number\n"); 
scanf("%d",&bin); 
while(bin!=0) 
{ 
    c=bin%10; 
    ar[i]=c; 
    i++; 
    bin = bin/10; 
} 
//ar[i]=c; 

for(j=0;j<i;j++) 
{ 

    sum=sum+(ar[j]*pow(2,j)); 
} 
printf("%d",sum); 
return 0; 

} 
+0

を参照してください。修正してPCで実行できますか? –

+0

@RohitVishwakarmaあなたの条件は間違っています。 bin!= 1を削除してみてください これはループエラーを解決するだけです。あなたのロジックは間違っています。私はあなたのロジックをよく見ておいてほしい。 –

+0

ありがとうございました、その作業 –

1

顔をしています。

これは、それが逆に壊す必要があります意味:私たちはそれはそれが本当であることを見密接上記を見れ

(bin==0 && bin==1) 

:我々は上記見つけるDe Morgan's Lawを適用

!(bin!=0||bin!=1) 

は同等です同時にbinを0と1にする必要があります。これは不可能です。だから、ループは決して終わらないでしょう。

+0

以前私は "bin = bin/10;"というステートメントを見逃しました。今は追加しました。再度チェックしてください。 –

関連する問題