2010-12-05 7 views

Répondre

4

Utilisation fgets() au lieu de scanf()

+2

Cela ne répond pas à la question, qui est "pourquoi". – caf

+0

merci! cela fonctionne – user531119

0

Eh bien bookname hargneux est une sorte de charbon ;-) Point est que scanf sous cette forme d'arrêt sur le premier caractère des espaces blancs.

Vous pouvez utiliser une chaîne de format différent, mais dans ce cas, vous devriez préférer utiliser fgets.

scanf devrait vraiment être utilisé pour l'entrée "formatée".

18

Le spécificateur de conversion %s provoque l'arrêt du caractère scanf au premier caractère d'espace. Si vous devez être en mesure de lire des caractères blancs, vous devrez soit utiliser le spécificateur de conversion %[, tels que

scanf("%[^\n]", bookname); 

qui va lire tout jusqu'au prochain saut de ligne et de stocker à bookname, bien être en toute sécurité, vous devez spécifier la longueur maximale du nom du livre dans le spécificateur de conversion; par exemple. si bookname a la place pour 30 caractères compter le caractère nul, vous devez écrire

scanf("%29[^\n]", bookname); 

Sinon, vous pouvez utiliser fgets():

fgets(bookname, sizeof bookname, stdin); 

Je préfère la solution fgets(), personnellement.

+0

très merci. bonne information :) – user531119