2016-03-06 14 views
6

Dies ist, was ich habe. Ich bin mir nicht sicher, wie ich es richtig schreiben soll. Ich habe versucht zu googlen, aber ohne Erfolg. Bitte erschaudern nicht zu viel:Proper Ternary Operator Format

cout << (guess > randomNumber) ? "\nWhoops! Try again!\n You guessed higher than the random number!\n\n" 
     : (guess < randomNumber) ? "\nWhoops! Try again!\n You guessed lower than the random number!\n\n" 
     : ""; 

Was es ich bin zu wollen dies tun:

// Gives hint that inputted number is higher or lower 
    // than inputted number 
    if (guess > randomNumber) 
     cout << "\nWhoops! Try again!" 
     << " You guessed higher than the random number!\n" 
     << endl; 
    else if (guess < randomNumber) 
     cout << "\nWhoops! Try again!" 
     << " You guessed lower than the random number!\n" 
     << endl; 

Jede mögliche Hilfe würde geschätzt. Ich möchte nur lernen, wie ich meine Programme effizienter und kleiner schreiben kann. Würde mich über Feedback freuen.

+0

Mit einem ternären Operator effizient ist ... Mit zwei zur gleichen Zeit ist unordentlicher, wenn Sie mich fragen. –

+0

Der Code sieht für mich ok aus. Hast du versucht es zu kompilieren? –

+0

Gibt es einen Grund, warum Sie einen verschachtelten ternären Operator anstelle des 'if' /' else if's verwenden möchten? Es ist viel einfacher zu sagen, was Ihr Programm tut, indem Sie es betrachten, anstatt diese verschachtelten ternären Operatoren zu entschlüsseln. – ppsz

Antwort

4

einige Klammern um den gesamten Ausdruck, sonst Boolesche Werte Druck am Ende Sie gehen:

int guess = 10; 
    int randomNumber = 9; 

    cout << (guess > randomNumber) ? "\nWhoops! Try again!\n You guessed higher than the random number!\n\n" 
      : (guess < randomNumber) ? "\nWhoops! Try again!\n You guessed lower than the random number!\n\n" 
      : "" ; 

// Output: 1 

Proper Code:

int guess = 10; 
    int randomNumber = 9; 

    cout << ((guess > randomNumber) ? "\nWhoops! Try again!\n You guessed higher than the random number!\n\n" 
      : (guess < randomNumber) ? "\nWhoops! Try again!\n You guessed lower than the random number!\n\n" 
      : ""); // Notice the brackets! 

/*Output: 
Whoops! Try again! 
You guessed higher than the random number!*/ 
+1

Vielen Dank! Danke, dass Sie es zur Arbeit gebracht haben. :) –

+0

@ red-one Bitte markieren Sie es als gelöst, wenn das der Fall ist! Vielen Dank! –

1

effiziente

zu nicht verwendet, was Sie da tun (wenn von „effizient“ Sie bessere Laufzeitmerkmale bedeuten).

kleine

Ein bescheidenes Ziel, aber nicht wenn Lesbarkeit kurz, weil es fällt (und noch weniger, wenn aufgrund der syntaktischen Komplexität ... fehlenden Klammern ... das Endergebnis ist falsch).

Erinnern: Der Code ist für Menschen geschrieben zu lesen.

Sie sollten wahrscheinlich mit der if und else Ansatz bleiben, die Sie auch in der Frage zeigen. Das heißt, ein IMHO „gut“ Ansatz (wenn Sie wirklich abstrakt über diese benötigen) wäre es in eine Funktion zu packen:

template<class T, class X, class Y, class Z> 
void comp_if(T value, T reference, X less, Y equal, Z greater) { 
    if (value < reference) less(); 
    else if (value > reference) greater(); 
    else equal(); 
} 

Gebraucht wie

// missing real macros a lot 
comp_if(foo, bar, 
    []() {cout << "less"; }, 
    []() {cout << "equal";}, 
    []() {cout << "greater"}); 

Ob dies wirklich mit Lesbarkeit hilft ist eine Entscheidung, die ich dem Leser überlassen muss.

+0

Es tut mir leid zu sagen, aber ich habe noch nicht so viel in C++ gelernt. Ich bin noch ein Anfänger, also .. Aber ich verstehe Ihren Standpunkt über Lesbarkeit.Speziell dafür wollte ich mich nur verdichten. Aber ich werde Ihren Rat in zukünftigen Programmen berücksichtigen. :) –

+0

@RedOne Kein Problem. Der Ansatz in meiner Antwort wird wirklich nur von Vorteil sein, wenn Sie * viel * solchen Codes haben. Versuchen Sie immer, einen möglichst lesbaren Code zu erhalten. Sie werden viel weniger Fehler machen, weil es einfacher ist, alles im Hinterkopf zu behalten. (Log n mentale Tiefe vs n mentale Breite) –

+0

@anonymous downwoters: Bitte erläutern Sie die Gründe für Ihre Stimme. Mein Beitrag IMHO beantwortet die Frage auf eine ziemlich direkte Art und Weise. Ich denke nicht, dass meine Antwort solche Abstimmungen verdient, nur weil ich nicht den kleinen Syntaxfehler hervorhob (sondern bessere Ansätze). –