C, la lecture de plusieurs numéros de la simple ligne d'entrée (scanf?)
J'ai écrit une application en C qui attend deux lignes en entrée.
Première entrée raconte comment grand un tableau de int et la seconde entrée contient des valeurs séparées par un espace.
Par exemple, l'entrée suivante
5
1 2 3 4 99
devrait créer un tableau contenant {1,2,3,4,99}
Quel est le moyen le plus rapide de le faire? Mon problème est de lire plusieurs numéros sans boucle à travers l'ensemble de la chaîne de vérifier si c'est un espace ou un nombre?
Grâce.
OriginalL'auteur migajek | 2010-03-29
Vous devez vous connecter pour publier un commentaire.
N'oubliez pas de
free(v)
après vous avez terminé!Aussi, si pour quelque raison vous avez déjà les chiffres dans une chaîne de caractères, vous pouvez utiliser
sscanf()
%d
(ainsi que la plupart des % de conversions, mais pas tous d'entre eux) saute automatiquement n'importe quel espace. Lire le scanf de la documentation pour les détails!"Si, pour une raison quelconque? Vous ne devez jamais utiliser
scanf
et doit préférer à l'aide defgets
avecsscanf
. c-faq.com/stdio/scanfprobs.htmldésolé, mais je suis en désaccord. Si vous avez vraiment comment utiliser scanf, vous pouvez l'utiliser en toute sécurité. Et en sachant que je veux dire, vraiment, de comprendre toutes les options et les conversions de scanf. (lire l'intégralité de la page de manuel)
Le fait qu'il peut laisser brutes d'entrée dans la mémoire tampon d'entrée devrait vous faire grincer des dents. Oui, il ya des façons que vous pouvez utiliser
scanf
en toute sécurité, mais tous les cercles que vous avez à passer à travers n'est tout simplement pas la peine.fgets
avecsscanf
est beaucoup plus simple et moins d'erreurs pour les non-initiés.OriginalL'auteur Denilson Sá Maia
Voici un exemple tiré de http://www.cplusplus.com/reference/cstring/strtok/ que j'ai adapté à notre contexte.
Il divise le str de la chaîne en sous-chaînes puis-je convertir chaque partie dans un int. Je m'attends à ce que la ligne d'entrée est de numéros séparés par des virgules, rien d'autre. La taille est la taille de votre tableau. Vous devriez faire scanf("%d", &taille); comme Denilson a déclaré dans sa réponse. À la fin, vous avez votre int tableau avec toutes les valeurs.
OriginalL'auteur Lunfel
Ici " N "est le nombre d'éléments du tableau de Tableau "A"
OriginalL'auteur M.A.K. Ripon
scanf()
est une sorte de douleur dans le cou. Découvrezstrtol()
pour ce genre de problème, il fera de votre vie très facile.va lire une ligne. Je ne sais pas pourquoi vous avez besoin de
strtok()
pour votre problème.strtol ne donnerai qu'un nombre premier. Ce n'est pas le but, ici, à droite?
Il ne donne un numéro à la fois, mais c'est facilement résolu avec une boucle.
OriginalL'auteur Carl Norum
Ce code utilise un simple approche de la lecture de chaque personnage à travers getchar().Nous allons sur la lecture d'un certain nombre util nous trouver un espace vide.L'indice " i " du tableau est mis à jour par la suite.Ceci est répété jusqu'à retour à la ligne('\n') est rencontré
Cette approche échoue lorsque les nombres sont négatifs ou de commencer avec un
'+'
. Il n'est pas C du code.OriginalL'auteur wahid_abdul