scanf: “% [^ \ n]” pula a segunda entrada, mas “% [^ \ n]” não. porque

Considere o seguinte código:

#include <stdio.h>

int main (void)
{
  char str1[128], str2[128], str3[128];

  printf ("\nEnter str1: ");
  scanf ("%[^\n]", str1);
  printf ("\nstr1 = %s", str1);

  printf ("\nEnter str2: ");
  scanf ("%[^\n]", str2);
  printf ("\nstr2 = %s", str2);

  printf ("\nEnter str3: ");
  scanf ("%[^\n]", str3);
  printf ("\nstr3 = %s", str3);

  printf ("\n");
  return 0;
}

Quando executado apenas o primeiroscanf pára para o prompt. O programa não para nos próximosscanf s. Mas se a string de formato for alterada de"%[^\n]" para" %[^\n]" (observe o espaço em branco antes de%), então funciona bem. Algum caractere de nova linha existente do buffer de entrada anterior é aceito automaticamente? Mas liberandostdin não resolve isso.

Qual é a causa disso.

questionAnswers(6)

yourAnswerToTheQuestion