Comment scanf poignée d'espace blanc?
Je suis nouveau sur le Cstring, désolé de poser des question stupide, s'il vous plaît aider.
char string[10];
printf("Give me your last name:\n");
scanf ("%s", string); //if i type 123 123
printf("Original string:%s\n", string); //it shows 123
De comparer:
char string[] = "123 123";
printf("Original string:%s\n", string); //it shows 123 123
OriginalL'auteur qwr qwr | 2012-03-31
Vous devez vous connecter pour publier un commentaire.
C'est le bon comportement. Par défaut
scanf
lit la chaîne jusqu'à ce qu'il atteigne à un espace.De
scanf
man:OriginalL'auteur Rafał Rawicki
Le problème est le scanf. Lorsque vous utilisez scanf avec %s il lit jusqu'à ce qu'il frappe les espaces.
Pour lire l'intégralité de la ligne, vous pouvez envisager d'utiliser fgets().
gets()
. Utilisationfgets()
ougetline()
à la place.Comment venir?
OriginalL'auteur Maz
scanf
traite de l'espace comme la fin de la chaîne.Donc, il s'arrête de lire une fois qu'il rencontre un
space
caractère.Alors que dans le cas de c, la gamme de style
\0
est considéré comme la fin du tableau.Lorsque vous initialisez,
Un
\0
est implicitement ajouté à la fin de la 7ème caractère3
, et elle marque la fin de ce tableau.OriginalL'auteur Alok Save
Ce que vous voyez ici se produit en raison de la façon dont
scanf()
œuvres. Vous pouvez imprimer des chaînes de caractères avec n'importe quel caractère à l'intérieur (peu importe si c'est un espace ou pas).scanf()
s'arrête une fois qu'il rencontre un espace qu'elle estime cette variable "terminé".OriginalL'auteur Mario
scanf
scans pour une chaîne jusqu'à ce que n'importe quel espace. Si vous avez besoin de lire jusqu'à ce qu'un saut de ligne, puis utiliserfgets()
:OriginalL'auteur Richard J. Ross III