IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Récupération de saisie avancée.


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Par défaut Récupération de saisie avancée.
    Bonjour à tous,

    Je suis confronté à une tâche un brin complexe... Mon code doit pouvoir récupérer une saisie de l'utilisateur, selon certaines conditions que voici:

    - J'initialise un tableau [m][n], affiché correctement sur le terminal

    - Je demande à l'utilisateur de fournir un nombre d'obstacles (des cases, ou rectangles) qu'il souhaite générer sur la carte (le tableau)

    - La liste des obstacles selon deux syntaxes possibles selon qu’il s’agit d’un
    obstacle isolé (= une case) ou d’un rectangle :

    o Isolé : indices de ligne et de colonne. Ex : 2 4
    o rectangle : intervalles d’indices de ligne et de colonnes. Ex : 3-5 6-11
    o mélange autorisé pour un rectangle: 3-5 4 ou 2 6-11

    C'est ici que ça se complique...

    D'une part je dois m'assurer que les coordonnées soient en corrélation avec le nombre d'obstacles définis par l'utilisateur.

    Il faut également que la récupération de la saisie me permette de faire la différence entre un obstacle isolé ou un rectangle, ainsi que de différencier les coordonnées pour associer les valeurs numériques au bon obstacle, je dois par exemple pouvoir lire "1 1 5-6 13 1-3 15-18 3 3 8 5" et en générer 5 obstacles.

    Je suis un peu perdu, et je ne sais pas par ou commencer, ni quel type de récupération de saisie serait le plus adapté. Le pseudo code me serait tellement utile

    Merci d'avance

  2. #2
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Par défaut
    Bonjour.

    Pour la récupération en elle-même, c'est à toi de voir. Scanf le fait très bien, mais il y a d'autres fonctions. Dans tous les cas, tu dois impérativement récupérer une chaine (char*) car tu dois pouvoir envisager toutes les possibilités (l'user peut entrer n'importe quoi).

    Bon, la grande question, c'est comment "déchiffrer" la chaîne reçue, et détecter le format donné par l'utilisateur.

    A mon avis, la fonction que tu vas utiliser : strtok

    strtok te permet de "fragmenter" une chaîne de caractères, en fonction d'un séparateur défini. Je ne vais pas te donner de code, mais déjà le principe :

    1. Tu fragmente la chaîne avec le séparateur " " (espace), pour stocker le membre de gauche dans une variable (m1) et le membre de droite dans une seconde (m2). Si tu rencontres plus de deux membres, c'est que l'utilisateur a fait une erreur.

    2. Ensuite, pour chaque membre récupéré, tu peux faire ainsi :
    a. Tu tentes de fragmenter le membre avec le séparateur "-", et si ça renvoie bien à nouveau deux sous-membres, c'est que le format était bien "a-b". Il te reste à appliquer " atoi( ta_chaine_nombre ) " sur a et b pour convertir les chaines en entier.
    b. Si fragmenter le membre avec "-" ne donne rien, tu peux en déduire que tu as un nombre sous la forme "a", donc tu peux appliquer directement "atoi ( a ) ".

    C'est un peu capilo-tracté, mais à mon avis, il n'y a pas beaucoup d'autres solutions, et, ici, ça te permet de procéder par étapes et de traiter les cas d'erreurs (retours de strtok, retours de atoi, etc)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Par défaut
    Salut, merci beaucoup pour la réponse rapide et précise !

    Le prof souhaite qu'on reste dans les fonctions de base, comme scanf() ou getchar. Est-ce qu'il n'y aurait pas un moyen de faire la même chose en appliquant des conditions à ces fonctions ? Ca fait un moment que je cherche mais ça ne donne rien...

    Il y a aussi la possibilité d'ajouter un compteur, du type compte=scanf("%d %d %d", &m1, &m2, &m3) pour vérifier que les coordonnées fournies sont en accord avec le nombre d'obstacles choisis: compte = coordonnées/2. Mais je ne sais pas comment, ni ou l'inclure pour obtenir ce que je veux...

    EDIT:

    je vais faire comme ceci:

    for(i=0; i<nombre_obstacles; i++)
    {
    scanf des trois premières valeurs sous forme de %d%c%d

    si c=' ' -> obstacle isolé (n1;n2)

    si c='-' -> rectangle

    conditions supplémentaires {...}
    }

    la boucle for sera assez grosse car j'ai beaucoup de conditions à tester mais ça devrait jouer Merci pour les réponses, je prends note de cette méthode de découpage Topic à fermer !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/05/2014, 15h30
  2. champs de saisie et récupération après saisie
    Par soufiane669 dans le forum SAP
    Réponses: 17
    Dernier message: 19/05/2011, 11h12
  3. SDL_ttf et récupération chiffre saisie
    Par DMboup dans le forum SDL
    Réponses: 8
    Dernier message: 26/07/2009, 18h15
  4. Réponses: 5
    Dernier message: 26/12/2007, 11h13
  5. [Makefile] [Avancé]Récupération de dépendances
    Par Ruok dans le forum Systèmes de compilation
    Réponses: 4
    Dernier message: 06/02/2004, 12h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo