2012-04-24 3 views
0

J'ai codé les codes suivants, mais il y avait un problèmeComment fonctionne la fonction scanf?

char p[20]; 
int n; 
errno = 0; 
n = scanf("%[^\n]",p); 
if (1 == n) 
{ 
    printf("%s\n",p); 
    scanf("%[^\n]",p); /*no waiting for input*/ 
    printf("%s\n",p); 
} 
+1

Vérifiez ce lien: http://stackoverflow.com/questions/6083045/scanf-n -skips-the-2nd-input-but-n-does-not-why – Spot

Répondre

3
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); 
} 
+0

Cela fonctionne maintenant! Thx !!!!! – Fionser

+0

@Fionser voir le code modifié que j'ai collé –