2016-03-03 12 views
8

Se inserisco il numero 5, questo ciclo deve essere eseguito 5 volte ma è in esecuzione 6 volte. Qual è il problema?Il ciclo è in esecuzione più di quanto specificato in C? Perché?

int main(){ 
     int i, *arr, size; 
     printf("Please enter the Number: "); 
     scanf("%d ",&size); 
     arr = (int*) malloc(size * sizeof(int)); 
     for(i = 0; i < size; i++){ 
      scanf("%d ", &arr[i]); 
     } 
} 
+0

Hai controllato il valore della dimensione prima del ciclo? – matt

+0

Sì, ho controllato. @ Matt –

+2

prova a rimuovere lo spazio dopo% d in ciclo scanf. –

risposta

23

Rimuovere lo spazio finale dalla stringa di formato scanf() utilizzato nel ciclo.

Fa sì che scanf() scartini tutti gli spazi bianchi dopo aver letto uno int (%d), finché non trova qualcosa che non è uno spazio bianco. Alla quinta iterazione del ciclo, scanf() legge int e continua fino a quando non trova spazi non bianchi. Questo dà l'illusione di dover leggere un altro numero intero.

Sull'ultima chiamata di scanf(), qualsiasi carattere non di spazi vuoti dopo i dati di interi causerà la fine della lettura.

7

rimuovere lo spazio qui:

questo:

scanf("%d ",&arr[i]); 
     ^

dovrebbe essere:

scanf("%d",&arr[i]); 
+1

Sì, sta funzionando. Ma qual è il problema? –

+1

È correlato a ['scanf'] (http://www.cplusplus.com/reference/cstdio/scanf/) che è piuttosto complicato. Non preoccuparti per il momento. –

+1

Per favore, puoi darmi la fonte in modo che io possa andare a leggere? Sono curioso di saperlo. @ Michael Walz –

0

troppo ho affrontato il problema simile. Per ottenerlo, rimuovi lo spazio dopo lo % d nel ciclo. Dovrebbe funzionare. Potrebbe essere una proprietà di scanf.

int main(){ 
     int i, *arr, size; 
     printf("Please enter the Number: "); 
     scanf("%d",&size);// Note the change here 
     arr= (int*) malloc(size * sizeof(int)); 
     for(i= 0;i < size;i++){ 
      scanf("%d",&arr[i]); 
     } 
    } 
+1

Ma qual è il problema? puoi spiegare per favore. –

+0

@Cool Guy Qualcuno ha modificato il codice. Ora è corretto. –

Problemi correlati