2017-12-20 4 views
1

Ich bin neu in der Programmierung Ich studiere über for-Schleife Ich habe es auf verschiedene Arten versucht und jedes Mal war Ausgabe anders. -Code, wenn ich schrieb nur "a" for-Schleife zu initialisieren:Warum sich Schleife in verschiedenen Situationen unterschiedlich verhalten

Eingang war "Enter binäre Zahl: 11011"

Ausgabe war "Dezimalzahl = 27"

#include <iostream> 
    using namespace std; 
    int main(){ 
     int a,b,c=1,d=0; 
     cout<<"Enter binary number:"; 
     cin>>a; 
     for (a;a!=0;a=a/10) { 
      b=a%10; 
      d=d+b*c; 
      c=c*2; 
     } 
     cout<<"Decimal Number="<<d<<endl; 

    } 

-Code, wenn ich schrieb "int a" for-Schleife zu initialisieren:

Eingabe war "Enter-Binärzahl: 11011"

Output war "Dezimalzahl = 0"

#include <iostream> 
using namespace std; 

    int main(){ 
     int a,b,c=1,d=0; 
     cout<<"Enter binary number:"; 
     cin>>a; 
     for (int a;a!=0;a=a/10) { 
      b=a%10; 
      d=d+b*c; 
      c=c*2; 
     } 
     cout<<"Decimal Number="<<d<<endl; 

    } 

-Code, wenn ich schreibe nichts für Schleife zu initialisieren:

Eingang war "Enter binäre Zahl: 11011"

Ausgabe war "Dezimalzahl = 27"

#include <iostream> 
using namespace std; 
int main(){ 
    int a,b,c=1,d=0; 
    cout<<"Enter binary number:"; 
    cin>>a; 
    for (;a!=0;a=a/10) { 
     b=a%10; 
     d=d+b*c; 
     c=c*2; 
    } 
    cout<<"Decimal Number="<<d<<endl; 

} 

Antwort

1
  • Ihr erster und letzter Code-Schnipsel voneinander nicht auseinander unterscheiden, von a ausgewertet wird und dessenderen Wert in dem Initialisierungsabschnitt der ersten for Schleife verworfen
  • Ihre zweite Schleife erneut erklärt a ohne es zu initialisieren . Variable a innerhalb der for Schleife ist nicht das gleiche wie die Variable a außerhalb der Schleife, so das Lesen seiner nicht initialisierten Wert ist undefiniertes Verhalten.

Da Sie wirklich keine separate Schleifenvariable benötigen, eine while-Schleife ist eine gemeinsame Wahl:

while (a) { 
    b = a%10; 
    d += b*c; 
    c *= 2; 
    a /= 10; 
} 

Beachten Sie die Verwendung von Verbindung Zuordnung Ausdrücke +=, *= und /=. Eine zusammengesetzte Zuweisung des Formulars x += y entspricht x = x + y

+0

Ich möchte es mit for loop nicht während –

+0

@UsmanQamar lösen Dann verwenden Sie Ihre dritte Version. Es ist etwas weniger konventionell als ein 'while'. – dasblinkenlight

0

In der zweite Fall, "int a" innerhalb des for expression, ist NICHT das gleiche "a" wie zuvor erklärt. Es hat begrenzten Umfang, beschränkt auf die for-Schleife. Ich denke nicht, dass der dritte Fall anders als der erste sein würde. Können Sie Ihre Ausgabe in der Frage veröffentlichen?

Verwandte Themen