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 :

problème de saisie


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Par défaut problème de saisie
    bonsoir tout le monde,
    donc voici mon code j'ai pas trouve le probleme !
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    int lectsec()
    {
        int val=0;
        char ch[2]="0",lire[256]="";
     
        do
        {
            fgets(lire,255,stdin);
            val=atoi(lire);
            if(val==0 && strcmp(lire,ch)!=0)  printf(" ERREUR ! caractere non autoriser veuillez reessayer : ");
            }
            while (val==0 && strcmp(lire,ch)!=0);
     
            return val;
            }
     
     
    void allocation(double ***a,double **x, int n, int m)
    {
         int i;
             (*x)=(double *)malloc(n*m*sizeof(double));
             (*a)=(double **)malloc(n*sizeof(double *));
             for(i=0; i<n; i++)
                (*a)[i]=(*x)+i*m;
    }
     
     
    void lecture(double ***a, int n, int m, double **x) //**a contient l'adresse de la matrice donc pour modifier cette adresse je dois ajouter une étoile pour pointer sur l'adresse de cette adresse 
    {                                             //j'ai ajouté le x en mode entree sortie car j'ai besoin de lui dans les fonctions compactage ...
         int i,j;
     
         //allocation
         allocation(a,x,n,m); //a et x sont des adresses donc ce n'est pas la peine d'ajouter &
     
         //la lecture de la matrice 
         printf("\n entrer les elements de la matrice :\n\n");
         for(i=0; i<n; i++)
         {
                  for(j=0; j<m; j++)
                  {
                                printf(" entrez l element [%d][%d] de la matrice : ",i,j); 
                                scanf("%lf",&(*a)[i][j]);
                                }
         }         
    }
     
    void affichage(double **a, int n, int m)
    {
         int i,j;
     
         for (i=0; i<n; i++)
         {
             for(j=0; j<m; j++)
             {
                      printf("  %lf",a[i][j]); sleep(800);  }
             printf("\n");
             }
    }
     
    void somme(int n, int m, double ***res)
    {
         int i,j;
         double **a=NULL, **b=NULL,*x, *x1, *x2;  // x, x1, x2 se sont des vecteurs qui contiendront les éléments des matrices a, b et res 
     
         printf("\n la 1ere matrice :\n");
         lecture(&a,n,m,&x1);
     
         printf("\n la 2eme matrice :\n");
         lecture(&b,n,m,&x2);
     
         // allocation de la mémoire pour res
         allocation(res,&x,n,m);
     
         //traitement
         for (i=0; i<n; i++)
         {
             for(j=0; j<m; j++)
             (*res)[i][j]=a[i][j]+b[i][j];
             }
         //affichage
         printf("\n\n la somme de ces deux matrices est : \n\n");
         affichage(*res,n,m);
     
    }
     
     
    int main(int argc, char *argv[])
    {  
        int n1,n2,m1,m2,boo=0;
        double **res;
        int p=0;    
     
                              do
                               {
                                  printf("\n entrez le nombre de ligne de la premiere matrice : ");
                                  n1=lectsec();
                                  printf("entrez le nombre de colonne de la premiere matrice : ");
                                  m1=lectsec();
                                  printf("entrez le nombre de ligne de la deuxieme matrice : ");
                                  n2=lectsec();
                                  printf("entrez le nombre de colonne de la deuxieme matrice : ");
                                  m2=lectsec();
     
                                  somme(n1,m1,&res);
                                  p++;
                                  }
                                  while(p!=3);
      system("PAUSE");	
      return 0;
    }
    dans le premier traitement de la boucle il affichera
    entrez le nombre de ligne de la premiere matrice :
    ce qui est normal mais dans le 2eme traitement il affichera :
    entrez le nombre de ligne de la premiere matrice : ERREUR ! caractere non autoriser veuillez reessayer :
    voila je ne sais pas pourquoi !!!!
    merci d'avance pour votre aide
    a+

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par ralf91
    dans le premier traitement de la boucle il affichera
    entrez le nombre de ligne de la premiere matrice :
    ce qui est normal mais dans le 2eme traitement il affichera :
    entrez le nombre de ligne de la premiere matrice : ERREUR ! caractere non autoriser veuillez reessayer :
    voila je ne sais pas pourquoi !!!!
    merci d'avance pour votre aide
    a+
    Tu as oublié que fgets() prenait aussi le '\n'... Problème récurrent. Je conseille de 'nettoyer' après saisie. Cherche 'clean' ou 'fclean' sur ce forum.

  3. #3
    Membre éclairé Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Par défaut
    salut, c'est a cause de '\n'
    donc c'est toujours l'histoire du buffer j'ai voulu l'eviter mais la voila encore
    svp comment faire pour regler ce probleme j'ai essaye plusieurs fois mais ???

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par ralf91
    salut, c'est a cause de '\n'
    donc c'est toujours l'histoire du buffer j'ai voulu l'eviter mais la voila encore
    svp comment faire pour regler ce probleme j'ai essaye plusieurs fois mais ???
    J'ai indiqué comment faire. Sinon :

    http://emmanuel-delahaye.developpez.com/inputs.htm

    Problème réglé définitivement.

Discussions similaires

  1. [TMaskEdit] Problème de saisie de date
    Par Pill_S dans le forum Delphi
    Réponses: 4
    Dernier message: 10/07/2006, 16h36
  2. problème de saisie
    Par lastrecrue dans le forum C
    Réponses: 8
    Dernier message: 03/07/2006, 18h04
  3. Richeditctrl - problème de saisie clavier
    Par KO-Tek dans le forum MFC
    Réponses: 5
    Dernier message: 20/12/2005, 11h15
  4. Problème de saisie de caractères
    Par XantaX dans le forum Assembleur
    Réponses: 3
    Dernier message: 07/12/2005, 15h37
  5. Problème de saisie avec le "."
    Par Pouf dans le forum ASP
    Réponses: 10
    Dernier message: 18/03/2005, 15h27

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