2013-04-13 16 views
7

scanf ("% d% c", & dimensioni, & chara); funziona ma scanf separato per l'immissione dei caratteri non funziona. Li mostro all'interno del codice. Perché?Perché 2nd scanf non funziona nel mio programma?

void squareCustomFill(int size, char chara); 

int main(void) { 

int size,i,k; 
char chara; 

printf("Enter size of square: "); //This works 
scanf("%d %c",&size,&chara); 

//printf("Enter fill character: ");  BUT WHY DOES NOT THIS WORK?? 
//scanf("%c",&chara); 

squareCustomFill(size,chara); 

return 0; 

} 

void squareCustomFill(int size, char chara){ 

int i,k; 

for (k=1;k<=size;k++){ 

    for(i=1;i<=size;i++) 
     printf("%c",chara); 
     printf("\n"); 

} 
} 

risposta

9

Scanf non consumare il carattere \n che rimase nel buffer dalla prima chiamata scanf.

Così ha fatto la seconda chiamata scanf.

È necessario cancellare lo stdin prima di leggere di nuovo o semplicemente sbarazzarsi della newline.

La seconda chiamata dovrebbe essere

scanf(" %c",&chara); 
    ^this space this will read whitespace charaters(what newline also is) until it finds a single char 
1

Sì credo Armin è corretta. scanf leggerà in spazi vuoti (barra spaziatrice, nuova riga, ecc.). Quando si inseriscono i valori se si fa clic sulla barra spaziatrice o si digita subito dopo il primo scanf, il secondo scanf leggerà quel valore (spazio, newline, ecc.). Quindi l'hai risolto con scanf ("% d% c", & size, & chara) perché c'è uno spazio tra% d e% c. Se vuoi separarli, fai quello che Armin ha suggerito: scanf ("% c", & chara).

0

Lanciare uno getchar() in mezzo a loro e rallegra quella linea esterna estranea.

Problemi correlati