2013-04-13 6 views
7

scanf ("% d% c", & Größe, & Chara); funktioniert aber separate scanf für die Zeicheneingabe funktioniert nicht. Ich zeige diese im Code. Warum das?Warum funktioniert scanf in meinem Programm nicht?

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

} 
} 

Antwort

9

Scanf nicht verbrauchen den \n Charakter, der in dem Puffer aus dem ersten Scanf Anruf blieb.

So der zweite scanf Anruf tat.

Sie müssen die Standardeingabe löschen, bevor Sie sie erneut lesen, oder einfach die Zeilenschaltung loswerden.

sollte Der zweite Aufruf

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

Ja, ich glaube, Armin korrekt ist. scanf liest Leerzeichen (Leertaste, Zeilenumbruch usw.). Wenn Sie Werte eingeben, wenn Sie auf die Leertaste klicken oder direkt nach dem ersten scan eingeben, liest der zweite scan diesen Wert ein (Leerzeichen, Zeilenumbruch usw.). Also hast du das mit scanf ("% d% c", & size, & chara) behoben, weil zwischen% d und% c ein Leerzeichen steht. Wenn Sie sie getrennt haben wollen, tun Sie einfach das, was Armin vorgeschlagen hat: scanf ("% c", & chara).

0

Werfen Sie eine getchar() zwischen ihnen und schlürfen Sie diese fremde Newline.