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 :

alternative à scanf pour un nombre


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Par défaut alternative à scanf pour un nombre
    Bonjour!
    Pour m'entrainer je me suis fait un petit programme pour résoudre un système d'équations à plusieurs variables... Il est pas tip-top mais il fonctionne si on lui fourni un tableau à 2 dimensions stockant les valeurs des coefficients.

    Donc je cherche à créer un programme permettant de (créer dynamiquement ce tableau) et de le remplir.
    On demande la saisie du nombre d'inconnu, on en déduit le nombre d'équations minimal necessaires et on crée le tableau.
    Ensuite je voulais utiliser quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
        printf("combien d'inconnues contiennent le systeme d'equations?");
        scanf("%i",&i);
        //creer un tableau de TAILLEY i et de TAILLEX i+1 amené a contenir les coefs
        for(j=0;j<TAILLEY;j++){
            printf("EQUATIION%i:\t",j+1);
            for(k=0;k<TAILLEX;k++){
                if(k==TAILLEX-1){
                    printf("= ");
                    scanf("%i",&nb);
                }
                else{
                    scanf("%i",&nb);
                    printf("%c",'a'+k);
                }
                L[j][k]=nb;
                if(signe=='-')
                L[j][k]= -1*L[j][k];
            }
        putchar(10);
        }
    mais je me rend compte que l'appuie sur entré de la saisie avec scanf va me faire revenir à la ligne alors que j'aimerais avoir mon équation sur une ligne.

    Je me suis aussi demandé si il fallait que j'utilise une chaine pour que ce soit plus simple mais je sais pas si c'est utile dans mon cas...
    si quelqu'un voit une piste, je suis preneur Merci!

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 800
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gromekkool Voir le message
    mais je me rend compte que l'appuie sur entré de la saisie avec scanf va me faire revenir à la ligne alors que j'aimerais avoir mon équation sur une ligne.
    Salut
    Effectivement tu auras ce souci. Tu en auras un autre avec le caractère <return> qui, ne faisant pas partie du schéma attendu par scanf(), ne sera pas traité par lui et restera alors dans stdin prêt à te pourrir ta saisie suivante.

    Une solution élégante pour ce sortir de ce pb est de demander à récupérer une chaine puis traiter cette chaine par sscanf(). Un des gros avantages de cette méthode est (en dehors d'éliminer le <return> de stdin) que sscanf() te renvoyant le nb d'éléments récupérés, tu sais de suite si ta saisie est bonne ou pas.
    Exemple
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char saisie[100];
    int nb;
    while(1)
    {
        printf("Saisissez un nombre :");
        fflush(stdout);
        fgets(saisie, 100, stdin);
        if (sscanf(saisie, "%d", &nb) == 1) break;
        printf("saisie incorrecte - recommencez...\n");
    }

    Citation Envoyé par gromekkool Voir le message
    Je me suis aussi demandé si il fallait que j'utilise une chaine pour que ce soit plus simple mais je sais pas si c'est utile dans mon cas...
    up...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Par défaut
    Je ne connais pas sscanf, je potasserais donc la doc demain. Et je reviendrai poster, en me servant de ton exemple.

    merci pour la réponse rapide!

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 491
    Billets dans le blog
    1
    Par défaut
    C'est comme scanf sauf qu'elle travaille sur une chaine de caractères et non sur stdin. Je partage aussi l'avis de Sve@r (original) : fgets pour une saisie simple et complète puis analyse de la chaine saisie.

  5. #5
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    868
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 868
    Par défaut
    Comme les autres, je dirais fgets pour récupérer l'entrée utilisateur et atoi (regarde les autres fonctions de ce man aussi) pour convertir ta chaîne en nombre.

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 491
    Billets dans le blog
    1
    Par défaut
    Attention à cette fonction : si une conversion échoue, atoi() renvoie 0. On ne peut donc pas savoir s'il y a eu une erreur de conversion. Cela peut passer pour des applications qui ont le droit de planter ou de faire n'importe quoi.

    Pour une conversion plus sûre, il faut utiliser la fonction strtol() qui permet une vérification de la validité du résultat et de connaitre la cause de l'erreur (certes non triviales).

    Ces remarques s'appliquent à toutes les fonctions des familles atox et strox.

    Vous pouvez lire ce fil de StackOverflow à ce sujet : http://stackoverflow.com/questions/3...tol-v-s-strtol
    Ou alors sur Developpez.com : http://www.developpez.net/forums/d12...r-strtol-atoi/

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

Discussions similaires

  1. [type] a utiliser pour un nombre decimal
    Par ozzmax dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 26/05/2006, 18h34
  2. PHP & MySQL : Problème pour compter nombre de tuples ?
    Par ExSter dans le forum Requêtes
    Réponses: 6
    Dernier message: 09/05/2006, 23h03
  3. scanf pour les debutants pas si sûr...
    Par wimbo dans le forum C
    Réponses: 8
    Dernier message: 29/04/2006, 12h28
  4. Tri d'une JTable pour des nombres
    Par chasse dans le forum Composants
    Réponses: 2
    Dernier message: 20/04/2006, 15h25
  5. Réponses: 4
    Dernier message: 25/03/2006, 23h05

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