2013-07-24 7 views
6

Sono principiante in C. Per favore non importa se la mia domanda è zoppa. In questo programma che ho scritto, quando uso il ciclo 'for' per la prima volta, mi aspetto che solo 3 valori siano memorizzati in un array ma memorizzi 4 valori e nel prossimo ciclo 'for' come previsto mostrano 3 valori. La mia domanda è perché nel 1 ° ciclo "per" ci vogliono 4 valori invece di 3?Memorizza i dati nell'array dall'input

#include<stdio.h> 
void main() 
{ 
    int marks[3]; 
    int i; 

    for(i=0;i<3;i++) 
    { 
     printf("Enter a no\n"); 
     scanf("%d\n",(marks+i)); 
    } 
    for(i=0;i<3;i++) 
    { 
     printf("%d\n",*(marks+i)); 
    } 
} 
+2

'main' vuoto non è legale. Usa 'int main'. – chris

+4

rimuovere '\ n' in scanf –

risposta

11

\n nel scanf era il problema

#include<stdio.h> 
int main() 
{ 
    int marks[3]; 
    int i; 

    for(i=0;i<3;i++) 
    { 
     printf("Enter a no\n"); 
     scanf("%d",(marks+i)); 
    } 

    printf("\nEntered values:\n"); 
    for(i=0;i<3;i++) 
    { 
     printf("%d\n",*(marks+i)); 
    } 

    return 0; 
} 

Motivo:

mi aspetto solo 3 valori vengono memorizzati in un array, ma resteranno memorizzati 4 valori e nel prossimo ' per 'loop come previsto mostra 3 valori. La mia domanda è perché in 1 ° ciclo "per" richiede 4 valori invece di 3?

Primo: No, è solo negozi 3 numero, ma non 4 numeri in serie marks[].

Secondo: interessante capire ciclo viene eseguito solo per tre volte per i = 0 a i < 3. Il ciclo for viene eseguito in base alle condizioni. Codice Più interessante è bloccato in scanf() come descritto di seguito:

vostra confusione è il motivo per cui è necessario inserire quattro numeri, non è perché si esegue un ciclo corre 4 volte, ma la sua causa scanf() funzione restituisce solo quando si inserisce un carattere non-spazio (e dopo alcuni immettere premere per immettere un simbolo numerico che non è spazio.

Per capire questo comportamento leggere il manuale: int scanf(const char *format, ...);:

Una sequenza di spazi vuoti (spazio, tabulazione, nuova riga, ecc .; cfr isspace(3)). Questa direttiva corrisponde a qualsiasi quantità di spazio bianco, incluso nessuno, nell'input.

Perché nel primo ciclo di, in scanf() aver incluso \n in stringa di formato, in modo che solo scanf() ritorni se comunicato un numero entrare (o un non-spazio chiave).

scanf("%d\n",(marks+i)); 
     ^
      | 
      new line char 

Cosa succede?

Supponiamo di ingresso al programma è:

23  <--- because of %d 23 stored in marks[0] as i = 0 
<enter> <--- scanf consumes \n, still in first loop 
543  <--- scanf returns, and leave 542 unread, 
           then in next iteration 543 read by scanf in next iteration 
<enter> 
193 
<enter> <--- scanf consumes \n, still in 3rd loop 
<enter> <--- scanf consumes \n, still in 3rd loop 
123  <--- remain unread in input stream 
+0

thanx DX ma quando ho usato \ n dopo% d in scanf, prende 2 valori la prima volta quando il valore di i è 0 ma quando il valore di i diventa 1 e 2 ci vuole solo 1, perché questo succede? – ranaarjun

+1

per favore vai su questo http://answers.yahoo.com/question/index?qid=20110801122000AA07FO8 spero che questo ti dia il motivo esatto –

+1

@GrijeshChauhan sicuro che sarà utile per tutti :) Si prega di fare –

0

rimuovere \n e i possono essere creati nel if come for (int i = 0; i < 3; i++) {}

Problemi correlati