Почему 2nd scanf не работает в моей программе?

scanf ("%d %c",&size,&chara); работает, но отдельный scanf для ввода символов не работает. Я показываю это внутри кода. Почему так?

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

 }
}

3 ответов


Scanf не потреблял \n символ, который оставался в буфере с первого вызова scanf.

так сделал второй вызов scanf.

вы должны очистить stdin перед чтением снова или просто избавиться от новой строки.

второй вызов должен быть

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

Да, я считаю, что Армин прав. scanf будет читать в пробелах (пробел, новая строка и т. д.). При вводе значений, если щелкнуть пробел или ввести сразу после первого scanf, второй scanf будет считывать это значение (пробел, новая строка и т. д.).). Так что для scanf("%Д %С",&размер&Чара) потому что есть пробел между %D и %с. Если вы хотите их отделить просто делать то, что Армин предложил: функции scanf(" %с",&Чара).


бросить getchar() между ними и хлебать эту постороннюю новую строку.