2016-07-15 12 views
-3

Ich versuche, ein Programm zu schreiben, das eine Binärzahl in Dezimal oder Dezimal in Binär umwandelt. Ich habe Bedingungen, einer von ihnen ist, dass ich Zahlen und Zahlensysteme Antworten mit der gets Funktion bekommen muss. In meinem Programm habe ich die Zeichenkette in einen ganzzahligen Wert geändert, um Zahlen zu verwenden. Das ist mein kleines Programm.binär zu dezimal in C Programmierung

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

int i,j,m, testnumber,realnumber,indx, total,k,x[10]; 
char numbersystem; 
char number[10]; 

int main(){ 
    printf("Is your number \"decimal\" (d) or \"binary\" (b)) "); 
    numbersystem = getchar(); 
    getchar(); 

    printf("Please Type your numbers"); 
    gets(number); 

i=0; 
realnumber=0; 
while(number[i]!='\0'){ 
    realnumber = realnumber*10 + (number[i]-48); 
    i++; 
} 

testnumber = i; 
indx=1; 

    if(numbersystem == 'b'){ 
     for(j=0; j<testnumber; j++){ 
     if (((number[j]-48)!=0) || ((number[j]-48)!=1)) { 
      printf("\nYou cannot use diffrent number in Binary form\n"); 
      break; 
     }else { 
      for(k=testnumber-1; k>0; k--){ 
       if((number[k]-48)=='1'){ 
       for(m=0; m<j; m++){ 
        indx = indx*number[m]; 
       } 
       total = total + indx; 
      } 
      } 
     } 
    } 
    printf("Number %d\n\n",total); 
    } 
} 

Mein Problem ist, ich denke hier:

((number[j]-48)!=0) || ((number[j]-48)!=1)) 

ich verschiedene Ideen ausprobiert, dann, wenn ich char String in Integer geändert,

(number[j]-48) 

zeigte mir eine Ziffer.

Aber als ich versuchte, Binärzahlen in meiner ursprünglichen Programm zu geben, habe ich „0“ gerade und „1“, aber ich erreiche diese Aussage:

printf("\nYou cannot use diffrent number in Binary form\n"); 
      break; 

Ich weiß nicht, was das ist genaues Problem, also brauche ich deine Hilfe.

+0

Sieht aus wie Sie einige grundlegende Debug tun müssen. Hast du überprüft was in 'number [j]' ist? – John3136

+0

Eine Nebenbemerkung, die Zeile gepufferte Eingabe sollte manuell gelöscht werden vor 'printf (" Bitte geben Sie Ihre Zahlen ");' ie 'while (getchat()! = '\ N') fortfahren ;; davor – sjsam

+0

die else-Bedingung sollte '0 oder 1' sein, dann sollte die if-Bedingung 'sein! (0 oder 1) 'was in'! 0 und! 1' übersetzt werden könnte – dvhh

Antwort

1

Diese Bedingung:

((number[j]-48)!=0) || ((number[j]-48)!=1)) 

immer bewerten auf "true". Sie wollen wahrscheinlich die beiden Tests mit „und“ statt „oder“, wie diese kombinieren:

((number[j]-48)!=0) && ((number[j]-48)!=1)) 
+1

@Ren, diese Seite kann ein wenig hart mit Anfänger Fragen und vor allem mit Englischlernenden sein. Du hattest eine gute Frage, aber es war ein bisschen schwer zu verstehen. Ich habe ein paar Änderungen vorgenommen, um die Grammatik zu verbessern, also werden die Downvotes vielleicht aufhören ... –