2013-01-31 13 views
5

Sono un principiante in C, quindi per favore perdonami se questa domanda è stupida o se la domanda stranamente.Come mai una stampa viene eseguita dopo che una condizione vera è stata testata?

sto leggendo Primer C più e uno degli esempi in Capitolo-8 è qualche ciclo che testare se l'utente ha inserito - a newline character or not, che non riuscivo a capire.

Il codice è corto, e vi mostrerò a voi:

int main(void) 
{ 
    int ch; /* character to be printed */ 
    int rows, cols; /* number of rows and columns */ 
    printf("Enter a character and two integers:\n"); 
    while ((ch = getchar()) != '\n') 
    { 
     if (scanf("%d %d",&rows, &cols) != 2) 
      break; 
     display(ch, rows, cols); 
     while (getchar() != '\n') 
      continue; 
     printf("Enter another character and two integers;\n"); 
     printf("Enter a newline to quit.\n"); 
    } 
    printf("Bye.\n"); 
    return 0; 
} 
void display(char cr, int lines, int width) // the function to preform the printing of the arguments being passed 

Quello che non capisco è proprio qui:

while (getchar() != '\n') 
       continue; 
      printf("Enter another character and two integers;\n"); 
      printf("Enter a newline to quit.\n"); 

Prima di tutto, il while (getchar() != '\n') sta testando il primo ch era entrato giusto? In secondo luogo, se questo è vero, come mai il continuo non salta le dichiarazioni printf e va al primo momento? non è quello che dovrebbe fare?

Tnx

+1

"Sto leggendo C primer plus" <--- Questo è il tuo più grande problema !! Uccidi quel libro con il fuoco !!! RTFN –

+3

Il 'continue' è solo fumo. Sarebbe meglio essere 'while (getchar()! = '\ N');'. –

+0

Grazie assegnato :) @Daniel Fischer – MNY

risposta

7

Perché ci sono nessuna parentesi dopo l'istruzione while, solo la riga successiva è inclusa nel ciclo. Quindi, continue continua il ciclo while finché non viene trovato un nuovo carattere di riga e quindi l'esecuzione continua alle istruzioni printf.

Si è equivalente alla presente:

while (getchar() != '\n') 
{ 
    continue; 
} 
+2

+1 per arrivare al vero problema della persona che chiede qui. – HWende

+0

grazie mille per la risposta! ma penso che se il compilatore vede la funzione getchar(), si fermerà e chiederà all'utente di inserire un carattere, quindi testarlo e poi continuare ... quindi questo getchar() nel frattempo sta testando l'input [email protected] – MNY

+1

@Nir Mentre nel buffer di input c'è ancora un input non elaborato, 'getchar()' legge un carattere dal buffer. Di solito, l'input da 'stdin' viene inviato al programma solo dopo che l'utente ha premuto Return/Enter, e quindi c'è sempre una nuova riga nel buffer per' getchar() 'per trovare infine. Se non ci sono input non consumati nel buffer e lo stream non è chiuso o corrotto, 'getchar()' blocca fino a quando non è stato inviato l'input al buffer. –

1

Il continuano viene applicato al while poco prima che i due printf -s in modo che quando si entra \n si uscire il più interno, mentre torna alla linea

printf("Enter another character and two integers;\n"); 
0

La continue vale per la while ciclo più vicino.

while (stuff) 
    continue; 

è uguale

while (stuf); 

(nota la virgola).

Hai appena detto "continua a fare il ciclo finché la condizione non diventa falsa".

0

Qui il ciclo while() è associato solo all'istruzione continue. Quindi non ha relazione con le affermazioni printf ..........

Problemi correlati