2016-07-24 11 views
0

Ich bin neu in der Programmierung und kann dies nicht funktionieren und habe überall gesucht, ich kann für eine Antwort denken. Die if-Anweisung in function1if (m != 0 || 1) scheint nicht gelesen zu werden, wenn cin >> 1 von function2 übergeben wird. Hier ist mein Code, jede Hilfe wäre willkommen.Warum ist wenn Anweisung nicht funktioniert

#include <iostream> 

void function1(int i); 

int main() { 
    using namespace std; 

    int i; 

    function1(i); 

return 0; 
} 
---------------------------------------------------------------------------- 
#include <iostream> 

void function2(); 

void function1(int i) { 
    using namespace std; 
    if (i != 0 || 1) /* not working when the variable 'i' is passed from function2 */ {  
    cout << endl << "i != 0 || 1" << endl; 
    function2(); 
    } 
    else if (i == 0 || 1) { 
     if (i == 0) { 
      cout << endl << "m == 0" << endl; 
     } 
     else if (i == 1) { 
      cout << endl << "m == 1" << endl; 
     } 
    } 
} 
---------------------------------------------------------------------------- 
#include <iostream> 

void function1(int i); 

void function2() { 
    using namespace std; 

    int i; 

    cout << endl << "type 0 or 1" << endl; 
    cin >> i; /* type 1 or 0 in here */ 
    function1(i); 
} 

Antwort

3

Obwohl user154248 Antwort (in Teilen zumindest) korrekt ist, könnten Sie daran interessiert sein, warum ...

Der Grund ist, dass operator!= höhere Priorität hat (dh wird vorher bewertet) operator||. Ihre if-Klausel entspricht also if((i != 0) || 1).

Darüber hinaus wird jeder Wert ungleich 0 (null/null) zu true ausgewertet, wenn in einer Ausprägung verwendet, die einen booleschen Parameter erwartet, so erhalten Sie if((i != 0) || true). Und nun, was auch immer i != 0 auswertet, ergibt der Gesamtausdruck x || truetrue.

Schließlich – wir zurück auf user154248 Antwort sind ...

Es besteht jedoch ein Problem bleibt, ist: i != 0 || i != 1 wird auch immer auf true auswerten: Wenn i gleich 0, i != 1 true ergibt, wenn i gleich 1, i != 0 tut dies ...

Was Sie tatsächlich brauchen, ist i != 0 && i != 1.

+0

Danke, normalerweise vergesse ich den erklärenden Teil :) – Ethan

+0

Ja, das funktioniert. Ich werde in deine Erklärung schauen, um ein tieferes Verständnis davon zu bekommen. Vielen Dank :) – Richard

3

Versuchen Sie, diese zu ändern:

if (i != 0 || 1) 

Um dies:

if (i != 0 || i != 1) 
+0

Danke für die Rückkehr :) Es schien nicht zu funktionieren .. – Richard

+0

Kein Problem. Ich habe das Gefühl, dass dieser Code sehr reduziert werden kann. Ich sehe, wie Sie 'function1()' mit einem 'int'-Parameter einrichten, aber Sie scheinen nichts weiterzugeben. Die Funktion wird nicht aufgerufen, wenn Sie dies nicht explizit von außen mit einem Parameter 'int' tun. – Ethan

+0

Sehen Sie meine Bearbeitung, ich denke, Sie versuchen, etwas wie folgt zu tun: – Ethan

Verwandte Themen