n = scanf("%[^\n]",p);
Ce dit scanner tous les caractères sauf \n
-à-dire ENTER. Donc, il vous permet d'entrer une chaîne et vous auriez appuyé sur ENTER. Ce ENTER caractère est encore dans stdin
tampon qui mettra fin à votre prochaine déclaration scanf
scanf("%[^\n]",p);/*no executed*/
et donc il vous semble que force d'exécuter! scanf
, lit d'abord à partir de la mémoire tampon, s'il n'y trouve pas de données suffisantes, puis attend votre entrée.
Alimentez le ENTRÉE vous avez entré d'abord à une fonction comme getchar()
. à-dire ajouter un getchar()
avant votre deuxième scanf
et maintenant votre deuxième scanf
acceptera une entrée de stdin
Quelque chose comme
if (1 == n)
{
printf("%s %d\n",p,n);
getchar();
scanf("%[^\n]",p);/*no executed*/
printf("%s\n",p);
}
Vérifiez ce lien: http://stackoverflow.com/questions/6083045/scanf-n -skips-the-2nd-input-but-n-does-not-why – Spot