scanf
оставляет входной поток, указывающий на \n
. В вашем случае это не имеет значения: каждый раз, когда он вызывается, scanf
будет перемещаться, пока не найдет следующий непробельный символ. Таким образом, если указать 10 строк name, a, b
, все будет работать так, как вы ожидаете.
Но учтите это:
scanf("%d", &a);
fgets(str, 20, stdin);
fgets
читает, пока не найдет первый символ новой строки, поэтому str
просто получит значение \n
, а fgets
не прочитает следующую строку ввода.