私はC言語の勉強の正当な部分を尽くしてしまいましたが、この矛盾を説明できませんでした。私はどこでも検索し、すべてのデータ型定義とリレーショナル構文を見直しましたが、それは私を超えています。C言語の条件文に配列要素を使用するとエラーが発生する
Cのプログラムから、入力が5桁でなければならないバイナリから10進への変換を行う質問があります。私は、次のコードを開発して、数を取り、除算と余り演算を行い、それを個々の数字に分割し、それぞれを配列の要素に代入します。
#include <stdio.h>
int power (int x, int y); //prototype
int main(void)
{
int temp, bin[5], test;
int n=4, num=0;
//get input
printf("%s","Enter a 5-digit binary number: ");
scanf("%d", &temp);
//initialize array
while(n>=0){
bin[n]=temp/power(10,n);
temp %= power(10,n);
n--; }
//verify binary input
for (test=4; test>=0; test--){
if ((bin[n]!=0)&&(bin[n]!=1)){
printf("Error. Number entered is not binary.\n");
return 0; }
//convert to decimal
while(n<=4){
num+=bin[n]*power(2,n);
n++; }
printf("\n%s%d\n","The decimal equivalent of the number you entered is ",num);
return 0;
}
//function definition
int power(int x, int y)
{
int n, temp=x;
if(y==0) return 1;
for(n=1; n<y; n++){
temp*=x; }
return temp;
}
誰かがに説明してもらえ:トラブルは、私は番号が入力されていることを確認しようとすると、確かに、それはここでは1または0
あるコードであるかどうかを確認するために、各配列要素をチェックして、バイナリだっ発生します私はなぜ入力に関係なく(00000か12345か)、私はいつもエラーメッセージを受け取るのですか?他のすべてがうまくいくようです。 ありがとうございます。
更新:if文をwhileループに移動する前に。これはまだ正しく動作するはずですか?
Update2:心配しないで、私の間違いに気づいた。 if文をwhile繰り返し前に移動すると、spsとKunal Tyagiによって提供された解が与えられます。この
while(n>=0){
bin[n]=temp/power(10,n);
temp %= power(10,n);
n--; }
n
後
実際、私は調整を行い、それはterrifically働いた。しかし理論的にはif文は前のwhileループに含まれていれば同様に動作するはずですが、そうではありません。 –
それはうまくいきません。あなたの助けを借りていただきありがとうございます。 –
@HectorSanabria @dubafekが彼の答えで述べたように、数値を10進数に変換する前に 'n = 0; 'を設定する必要もあります。私は答えを更新しました。そのためにあなたが何らかのエラーを起こしていないように見えても、あなたはその変更を行う必要があります。 – sps