2010-01-18 5 views
4

Sous Windows,Comment scanf() fonctionne-t-il vraiment?

char c; 
int i; 

scanf("%d", &i); 
scanf("%c", &c); 

L'ordinateur permet de sauter pour récupérer le caractère de la console parce que '\ n' est restant sur le tampon. Cependant, j'ai découvert que le code ci-dessous fonctionne bien.

char str[10]; 
int i; 

scanf("%d", &i); 
scanf("%s", str); 

Tout comme le cas ci-dessus, « \ n » est en restant sur le tampon, mais pourquoi Scanf obtient avec succès la chaîne de console cette fois-ci?

+1

Besoin d'un peu plus d'entrée ici. Que sais-tu dans la console? Qu'est-ce que vous voulez qu'il obtienne? Il n'y a aucune raison pour que le code ci-dessus ne fonctionne pas comme prévu, mais cela dépend de ce qui est prévu. – Martin

Répondre

6

De la page man gcc (Je n'ai pas de Windows à portée de main):

% c: correspond à un nombre fixe de caractères, toujours. La largeur de champ maximale indique comment lire beaucoup de caractères; Si vous ne spécifiez pas le maximum, la valeur par défaut est 1. Il ne saute pas non plus les caractères d'espace initiaux. % S: correspond à une chaîne de caractères qui ne sont pas des espaces.

Il saute et supprime l'espace initial , mais s'arrête quand il rencontre plus d'espaces après avoir lu quelque chose. [Cette clause devrait expliquer le comportement que vous voyez. ]

1

Vous avez de la difficulté à comprendre la question, mais scanf ignore tous les caractères d'espacement. n est un caractère d'espace. Si vous voulez détecter quand l'utilisateur appuie sur entrer, vous devriez utiliser fgets.

fgets(str, 10, stdin); 
+0

sry pour mauvais eng :(Je pense que j'aurais dû utiliser le mot «get» plutôt que «récupérer» .J'ai juste confondu les significations. – Jaebum