2016-03-06 15 views
6

Questo è quello che ho. Non sono sicuro di come scriverlo correttamente. Ho cercato su Google, ma senza risultato. Si prega di non rabbrividire troppo:Formato operatore ternario corretto

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" 
     : ""; 

Quello che sto volerlo fare è questo:

// 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; 

Qualsiasi aiuto sarebbe apprezzato. Voglio solo imparare come posso scrivere i miei programmi per essere più efficienti e più piccoli. Gradirei qualsiasi feedback.

+0

utilizzando uno operatore ternario è efficiente ... Utilizzando due allo stesso tempo sono più disordinati se me lo chiedi. –

+0

Il codice mi sembra a posto. Hai provato a compilarlo? –

+0

C'è un motivo per cui vuoi usare l'operatore ternario annidato invece di quello 'se' /' else if'? È molto più facile dire cosa sta facendo il tuo programma osservandolo invece di decifrare quegli operatori ternari annidati. – ppsz

risposta

4

mettere un po 'le staffe intorno l'intera espressione, altrimenti si sta andando a finire per la stampa i valori booleani:

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 

codice appropriato:

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

Grazie mille! Grazie per averlo fatto funzionare. :) –

+0

@ red-one Si prega di contrassegnarlo come risolto se questo è il caso! Grazie! –

1

più efficiente

non relative a quello che stai facendo lì (se per "efficiente" intendi migliori caratteristiche di runtime).

minore

Un obiettivo modesto, ma non se leggibilità è inferiore a causa di esso (e tanto meno se, a causa della complessità sintattica ... parentesi mancanti ... il risultato finale è sbagliato).

Ricorda: il codice è scritto per essere letto dagli umani.

Si dovrebbe probabilmente attenersi all'approccio if e else che si sta visualizzando anche nella domanda. Detto questo, un approccio IMHO "buono" (se si ha realmente bisogno di astratto su questo) sarebbe per il confezionamento in qualche funzione:

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(); 
} 

Usato come

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

Se questo aiuta veramente con la leggibilità è una scelta che lascio al lettore fare.

+0

Mi dispiace dirlo, ma non ho ancora imparato molto in C++. Sono ancora un principiante, quindi .. Ma capisco il tuo punto sulla leggibilità.In particolare per questo, volevo solo condensare. Ma prenderò in considerazione il tuo consiglio nei programmi futuri. :) –

+0

@RedOne Nessun problema. L'approccio preso nella mia risposta sarà davvero utile solo se hai * molto * di tale codice. Cerca sempre di ottenere il codice più leggibile possibile. Farai meno errori quando lo farai, perché sarà più facile tenere tutto a mente. (Log n profondità mentale vs n larghezza mentale) –

+0

@ anonimi downvoters: si prega di spiegare i motivi del tuo voto. Il mio post IMHO risponde alla domanda in modo piuttosto diretto. Non credo che la mia risposta meriti tali voti solo perché non ho evidenziato il piccolo errore di sintassi (ma ho invece fornito approcci migliori). –