2017-07-09 5 views
-4

In meinem aktuellen Programm habe ich vom Benutzer eine Nummer eingegeben, die in einer Char-Liste gespeichert wird. Danach gehe ich durch die Liste und versuche, diese Nummer einer int-Variablen zuzuordnen. Da kommt es zu einem Fehler. Dies ist ein Auszug aus meinem Code.Wie kann man ein Zeichen mit einer Zahl vergleichen? C++

 if (list1[j]=='1'); 
      z=1; 
     if (list1[j]=='2'); 
      z=2; 
     if (list1[j]=='3'); 
      z=3; 
     if (list1[j]=='4'); 
      z=4; 

Das Problem ist, dass z immer 4 wird, auch wenn Liste [j] = 3. Ich weiß, dass ich meine Vergleiche falsch mache, aber ich konnte sie nicht finden. Ich würde Ihre Hilfe schätzen. Diese

ist, wie ich die Liste definieren:

char list1[32]; 

Und das ist, wie ich es füllen:

for(int i=0;i<(2*c);i+=2) 
{ 
    cin>>list1[i]>>list1[i+1]; 
} 
+2

Entfernen Sie die Semikolons von Ihren if-Anweisungen. – pstrjds

+0

Semikolons nach dem Schließen lassen paren: 'if (list1 [j] == '1')/* kein Semikolon hier * /' –

+0

Ja, mein Fehler. Aber was es jetzt tut ist, dass es immer die Nummer als 1 statt 4 betrachtet. –

Antwort

0

Sie können Ihre if Aussagen mit einer einzigen Mathematik Linie ersetzen:

z = list1[j] - '0'; 

Dies funktioniert für die meisten Kodierungen.

Hinweis: Die obige Anweisung funktioniert nur mit einstelligen Zeichen.

Edit 1: switch vs. if
Wenn Sie darauf bestehen, zu vergleichen, glaube ich, ein switch besser lesbar sein würde:

switch (list[j]) 
{ 
    case '1': z = 1; break; 
    case '2': z = 2; break; 
    case '3': z = 3; break; 
    // ... 
} 

Die einzige Anweisung oben ist immer noch weniger Code, weniger Chancen für Mängel .

+0

Ich werde das jetzt versuchen! –

+0

Probieren Sie beide Vorschläge - sie beide funktionieren. Ich habe Schalter nie gemocht, aber es ist offensichtlich sehr effizient in Szenarien wie diese. Vielen Dank für Ihre Hilfe Ich werde die Antwort akzeptieren, sobald stackoverflow es mir erlaubt. –

0

Alles, was Sie tun müssen, ist die Semikolons aus dem if-Anweisungen fallen. Wenn Sie das Semikolon nach jeder if-Anweisung einfügen, wird der Codeblock in der if-Anweisung nicht ausgeführt. Es sollte wie folgt aussehen:

if (list1[j]=='1') 
    z=1; 
if (list1[j]=='2') 
    z=2; 
if (list1[j]=='3') 
    z=3; 
if (list1[j]=='4') 
    z=4; 
+0

Ich tat, es änderte nur das Problem, immer z gleich 1 zu haben. Danke für Ihre Hilfe. –

+0

Die Antwort unter meinem sollte eigentlich Ihr Problem lösen. Ich empfehle Ihnen einen Versuch (: –

Verwandte Themen