entrer une serie d'entiers sur une seule ligne - C - Programmation
Marsh Posté le 01-04-2004 à 19:11:32
Je vois pas trop le pb, avec scanf tu peux entrer plusieurs valeurs à la suite séparées par un espace ou séparateur quelconque :
Code :
|
Ensuite tu imbriques dans ton while une boucle for pour tester si les valeurs entrées sont dans le domaine voulu.
edit : je vois que tu veux laisser à l'utilisateur la possibilité de rentrer un nombre inconnu de valeurs. Dans ce cas tu reprend l'exemple au dessus, mais avec un nombre de %d et &rep[i] suffisemment important pour laisser l'utilisateur autant de valeurs qu'il souhaite.
Je crois que dans ce cas scanf remplira "rep" jusqu'à la derniere bonne valeur entrée par l'utilisateur, et s'il rencontre une erreur parce que le nombre de valeurs entrées est inférieur à celui escompté alors il s'arrêtera là. Je ne sais pas ce qu'il mettra dans les dernieres valeurs (faut tester, ou mieux, lire un petit cours sur scanf) mais je pense qu'il les laissera non initialisées.
Apres suffit donc d'avoir initialisé tout le tableau (avec des 0par exemple) avant de faire le scanf pour voir "où l'utilisateur s'est arrêté de rentrer des données".
Petit problème : reste à vérifier que scanf fonctionnera bien comme je l'imagine, et aussi celà oblige à rentrer toutes les valeurs d'un coup (à moins d'adapter le test conditionnel qui suit le scanf). Je me rend compte que c'était peut être ça l'objet du topic en fait . Fallait détailler plus alors
Marsh Posté le 01-04-2004 à 19:22:08
Apres vérification, pour que mon truc au dessus marche il faut mettre un autre séparateur qu'un espace on dirait, sinon si on valide la saisie avant d'avoir mis le nb de valeurs spécifié alors le curseur descend à la ligne et attend qu'on rentre toutes les valeurs qu'on a spécifié.
Avec une virgule comme séparateur ça marche comme je l'imaginais par contre. Les valeurs affichées pour les éléments du tableau qui n'ont pas recu de valeur sont des grands nombres apparemment aléatoires : des variables qui n'ont pas étées initialisées donc...
Marsh Posté le 01-04-2004 à 19:24:52
Pour le test qui suis, je pense pouvoir sans probleme verifier les valeur contenu dans le tableau apres et demandé l'utilisateur de coriger individuellement les valeur erroné.
Je vai essayer ton idée pour le scanf, mais j'ai limité le nombre max de colonne à 10, ca fait beaucoup de %d
merci quand meme de ton aide.
Marsh Posté le 01-04-2004 à 19:33:43
re salut!
Aprés essais, scanf attend d'avoir reçus les 10 valeurs avant de bien vouloir passer à la fonction suivante
Marsh Posté le 01-04-2004 à 19:38:12
ok. petite rectification : c'est une boucle while qu'il faut imbriquer dans le for, pas l'inverse évidemment
En fait c'est ce que tu fais pour l'instant, sauf qu'il faut sortir le printf/scanf de la for donc puisque on remplit tout le tableau d'un coup, et apres on teste si chaque valeur est correcte jusqu'à trouver là où l'utilisateur s'est arrêté d'en rentrer. Là selon ce que tu cherches à faire, sois tu lui fais rentrer ce qui manque soit tu consideres que les valeurs du tableau à utiliser s'arrêtent là ...
Bon en fait c'est tres simple à comprendre je crois, mais c'est sûr que c'est assez lourd côté code... A mon avis il doit y avoir possibilité de faire quelque chose de plus court et plus souple, mais comme je sais pas trop ce que tu cherches à faire (à part faire rentrer un nb à priori inconnu de valeur à l'utilisateur et vérifier qu'elles sont bien comprises entre 2 bornes) je peux pas t'aider plus, même si ça doit peut être pouvoir etre raccourci ou optimisé...
edit : ça c'était une réponse au post qui precede le "re salut".
Marsh Posté le 01-04-2004 à 19:39:22
cortex21 a écrit : re salut! |
Je te l'ai dit dans mon post suivant ! Ca fait effectivement ça si on met un simple espace comme séparateur, par contre avec des virgules là c'est ok
Code :
|
Marsh Posté le 01-04-2004 à 20:00:10
cortex21 a écrit : re salut! |
Je te propose quelque chose du genre (je sais je me fais chier) :
#include <stdio.h> |
Tu peux rentrer le nombre d'entier que tu veux simplement à la fin de chque boucle, il te suffit de mettre à jour ton tableau et éventuellement de générer une erreur si le nombre d'entiers saisis est trop grand ou si aucun entier n'est saisi.
Pour la partie en commentaire, c'est normalement pour gerer le cas d'entiers trop longs mais à la compilation ça ne passait pas !
Exemple :
Entrez une serie de nombre. |
Entrer une serie de nombre. |
La méthode n'est pas parfaite car elle tolère les caractères parasite entre les nombres. Mais ça ce corrige facilement en modifiant la condition du while de la boucle.
Il te reste encore un peu de travail !
PS : En fait c'est du C et pas du C++.
Marsh Posté le 01-04-2004 à 20:26:04
Merci pour votre aide.
Pour preciser ce que je cherche a faire :
le joueur a definie les parametres avant : nombre d'entiers et valeurs max qu'ils peuvent prendre.
Le but est de trouver un code au format configurer par le joueur.
par exemple si le joueur a choisi 4 colonne et des entier de valeurs max 5, on pourrai avoir une combinaison de ce genre : 1 3 5 4.
ensuite je compare la valeur entré par l'utilisateur à celle recherché et je lui indique le nombre d'entier bien placé et le nombre d'entier mal placé.
C'est le principe du Mastermind.
Pour une question de lisibilité et de pratique je voudrai que l'utilisateur puisse rentrer la combinaison de chiffre sur une seule ligne, et il faut que les entier soit stocké dans un tableau afin de pouvoir effectuer la comparaison.
Darkoli > ton programme semble tres bien fonctionné sous visual c++, mais comme ca depasse mes competences, pourrai tu me dire ce qu'il y a eventuellement a modifier pour recuperer les entier dans un tableau rep et pour que le nombre d'entier entré soit limité à la valeur d'une variable col deja definie?
Marsh Posté le 01-04-2004 à 20:50:26
ami du mauvais C bonsoir
Marsh Posté le 01-04-2004 à 21:10:42
a la base, c'est du c++ que j'utilise, je ne connait absolument rien au C :s
Marsh Posté le 01-04-2004 à 21:32:49
euh oui là il est entierement en C ton programme...
(à part peut etre le commentaire )
Marsh Posté le 02-04-2004 à 07:07:15
Effectivement, renseignement pris il s'agit bien de C, le C++ viendra plus tard. Quelqu'un pourrai m'expliquer la difference entre les deux juste par curiosité?
Marsh Posté le 02-04-2004 à 07:18:42
ben c'est 2 langages très différents, le C étant un tout petit sous ensemble du C++
Marsh Posté le 01-04-2004 à 18:41:42
Salut,
j'ai commencé le c++ il y a peu de temp, et j'essai de faire un petit jeu ressemblant à un mastermind en ligne de commande.
actuellement j'entre le code chiffre par chiffre :
avec col le nombre de colonne du code ( par exemple un code de la forme xx xx xx xx a 4 colonnes ) et vmax la valeur max de chaque colonne.
Je voudrai maintenant arriver à entrez directement le code sur une seul ligne, càd que le joueur tape par exemple 12 1 2 3 et retrouver dans mon tableau rep[0] = 10, rep[1] = 1, rep[2]= 2 et rep[3] = 3. Mon probleme est que le nombre de chiffre est variable.
Si quelqu'un à une idée, je suis preneur
merçi
Message édité par cortex21 le 02-04-2004 à 07:10:57