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 :

Petit Problème d'Affichage


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Petit Problème d'Affichage
    Bonjour,

    j'ai un petit problème. J'ai un code où il y a trois options en fonctions de l'argument choisi. De façon indépendante elles marchent mais une fois mise ensemble cela ne m'affiche plus rien, le programme ne retrant pas mes conditions. Si quelqu'un pouvait me dire d'où ça vient.

    Merci d'avance.

    Mon code :

    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
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    #include <stdio.h>                                         
    #include <stdlib.h>
    #include <time.h>
     
    int    Random (int _iMin, int _iMax)
    {
      return (_iMin + (rand () % (_iMax-_iMin+1)));
    }
     
    int    main(int argc, char **argv)
    {
      int resultats_a[20];
      int resultats_b[20];
      int i;
      int j;
      int iRandom;
      int results;
      int total;
      int Pa;
      int temp;
     
      i = 0;
      j = 0;
      srand(time(NULL));
      if(*argv[1] == 1)
        {
          printf("Vecteur A : ");
          while(i <= *argv[2])
        {
          iRandom = Random (-9, 9);
          resultats_a[j] = iRandom;
          printf(" %d", iRandom);
          j++;
          i++;
        }
          i = 0;
          j = 0;
          printf("\nVecteur B : ");
          while(i <= *argv[2])
        {
          iRandom = Random (-9, 9);
          resultats_b[j] = iRandom;
          printf(" %d", iRandom);
          j++;
          i++;
        }
          printf("\n");
          i = 0;
          j = 0;
          if(i == 0)
        printf("Valeur de A + B : ");
          while(i <= 6)
        {
          results = resultats_a[i] + resultats_b[j];
          printf(" %d", results);
          i++;
          j++;
        }
        }
      printf("\n");
      if(*argv[1] == 2)
        {
          i = 0;
          j = 0;
          srand(time(NULL));
          printf("Nombre P : ");
          scanf("%d", Pa);
          printf("Vecteur A : ");
          while(i <= *argv[2])
        {
          iRandom = Random (-9, 9);
          resultats_a[j] = iRandom;
          printf(" %d", iRandom);
          j++;
          i++;
        }
          i = 0;
          j = 0;
          if(i == 0)
        printf("Vecteur p.A: ");
          while(i <= *argv[2])
        {
          results = resultats_a[i] * Pa ;
          printf(" %d", results);
          i++;
          j++;
        }     
        }
      if(*argv[1] == 3)
        {
          i = 0;
          j = 0;
          srand(time(NULL));
          printf("Vecteur A : ");
          while(i <= *argv[2])
        {
              iRandom = Random (-9, 9);
              resultats_a[j] = iRandom;
              printf(" %d", iRandom);
              j++;
              i++;
            }
          i = 0;
          j = 0;
          printf("\nVecteur B : ");
          while(i <= *argv[2])
            {
              iRandom = Random (-9, 9);
              resultats_b[j] = iRandom;
              printf(" %d", iRandom);
              j++;
              i++;
            }
          i = 0;
          j = 0;
          temp = 0;
          while(resultats_a[i] & resultats_b[j])
        {
          total = resultats_a[i] * resultats_b[j];
          temp = temp + total;
          i++;
          j++;
        }
          printf("\nProduit scalaire (A,B) : %d", temp);
        }    
    }

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par I_Will_Be_back Voir le message
    j'ai un petit problème. J'ai un code où il y a trois options en fonctions de l'argument choisi. De façon indépendante elles marchent mais une fois mise ensemble cela ne m'affiche plus rien, le programme ne retrant pas mes conditions. Si quelqu'un pouvait me dire d'où ça vient.

    Mon code :
    Tu peux déjà commencer par corriger ça :
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:67: warning: format argument is not a pointer (arg 2)
    main.c: At top level:
    main.c:10: warning: unused parameter 'argc'
    main.c: In function `main':
    main.c:126: warning: control reaches end of non-void function
    main.c:19: warning: 'Pa' might be used uninitialized in this function
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 8 seconds)
    0 errors, 4 warnings
    Si ton compilateur ne dit rien, il est probablement mal configuré :

    http://emmanuel-delahaye.developpez....tm#cfg_compilo

    Attention, les identificateurs commençant par _ sont réservés à l'implémentation. On a pas le droit de les utiliser dans une application.

    Ceci n'a pas de sens.
    1. Tu n'as pas vérifié au préalable si le paramètre existe (argc...)
    2. *argv[1] désigne un caractère
    3. 1 a peu de chance d'être la valeur d'un caractère... En tout cas, on ne sais pas ce que ça veut dire...

    Tu devrais préciser ce que tu veux faire avec la ligne de commande, quels sont les paramètres attendus.
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour toutes tes indications.

    Mon programme doit prendre en premier argument le numéro de l'option, ici entre 1 et 3, et en second argument le chiffre/nombre sur lequel il doit travailler ou le le nombre de fois qu'il doit réaliser l'action ,tout dépend de l'option.
    C'est un programme sur les vecteurs.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par I_Will_Be_back Voir le message
    Mon programme doit prendre en premier argument le numéro de l'option, ici entre 1 et 3, et en second argument le chiffre/nombre sur lequel il doit travailler ou le le nombre de fois qu'il doit réaliser l'action ,tout dépend de l'option.
    C'est un programme sur les vecteurs.
    As-tu bien conscience que ce que que récupère argv[] est une chaine de caractère ? C'est donc '1' qu'il faut tester et non 1...

    Tu veux donc probablement faire :
    que tu devrais coder
    pour être plus clair...

    Tu pourrais aussi tester la chaine avec strcmp(), ce serait plus sûr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       if (strcmp (argv[1], "1") == 0)
    Ensuite, pour argv[2], il faut faire une conversion en valeur numérique avec strtol() (bien lire la doc...)
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Salut !

    Tu pourrais aussi tester la chaine avec strcmp(), ce serait plus sûr :
    Code :

    if (strcmp (argv[1], "1") == 0)
    Est ce qu'il y'a une différence entre tester directement l'égalité entre les 2 caractères et utiliser strcmp ??
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par GyZmoO Voir le message
    Est ce qu'il y'a une différence entre tester directement l'égalité entre les 2 caractères et utiliser strcmp ??
    L'effet n'est pas le même. Si la chaine utilisateur est "123", le test de '1' est plus laxiste que le test de "1". Tout dépend du degré de sécurité voulu...
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Je ne comprends pas trop la conversion avec strtol.

    J'ai fait les modifications sur mon programme, et j'ai un segmentation fault maintenant >_<

    Vecteur A : -4
    Segmentation fault



    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
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    #include <stdio.h>                                          
    #include <stdlib.h>
    #include <time.h>
     
    int	Random (int iMin, int iMax)
    {
      return (iMin + (rand () % (iMax-iMin+1)));
    }
     
    int	main(int argc, char **argv)
    {
      int resultats_a[20];
      int resultats_b[20];
      int i;
      int j;
      int iRandom;
      int results;
      int total;
      int Pa;
      int temp;
     
      i = 0;
      j = 0;
      srand(time(NULL));
      if(argv[1][0] == '1')
        {
          printf("Vecteur A : ");
          while(i <= *argv[2])
    	{
    	  iRandom = Random (-9, 9);
    	  resultats_a[j] = iRandom;
    	  printf(" %d", iRandom);
    	  j++;
    	  i++;
    	}
          i = 0;
          j = 0;
          printf("\nVecteur B : ");
          while(i <= *argv[2])
    	{
    	  iRandom = Random (-9, 9);
    	  resultats_b[j] = iRandom;
    	  printf(" %d", iRandom);
    	  j++;
    	  i++;
    	}
          printf("\n");
          i = 0;
          j = 0;
          if(i == 0)
    	printf("Valeur de A + B : ");
          while(i <= 6)
    	{
    	  results = resultats_a[i] + resultats_b[j];
    	  printf(" %d", results);
    	  i++;
    	  j++;
    	}
        }
      printf("\n");
      if(argv[1][0] == '2')
        {
          i = 0;
          j = 0;
          srand(time(NULL));
          printf("Nombre P : ");
          scanf("%d", Pa);
          printf("Vecteur A : ");
          while(i <= *argv[2])
    	{
    	  iRandom = Random (-9, 9);
    	  resultats_a[j] = iRandom;
    	  printf(" %d", iRandom);
    	  j++;
    	  i++;
    	}
          i = 0;
          j = 0;
          if(i == 0)
    	printf("Vecteur p.A: ");
          while(i <= *argv[2])
    	{
    	  results = resultats_a[i] * Pa ;
    	  printf(" %d", results);
    	  i++;
    	  j++;
    	}      
        }
      if(argv[1][0] == '3')
        {
          i = 0;
          j = 0;
          srand(time(NULL));
          printf("Vecteur A : ");
          while(i <= *argv[2])
    	{
              iRandom = Random (-9, 9);
              resultats_a[j] = iRandom;
              printf(" %d", iRandom);
              j++;
              i++;
            }
          i = 0;
          j = 0;
          printf("\nVecteur B : ");
          while(i <= *argv[2])
            {
              iRandom = Random (-9, 9);
              resultats_b[j] = iRandom;
              printf(" %d", iRandom);
              j++;
              i++;
            }
          i = 0;
          j = 0;
          temp = 0;
          while(resultats_a[i] & resultats_b[j])
    	{
    	  total = resultats_a[i] * resultats_b[j];
    	  temp = temp + total;
    	  i++;
    	  j++;
    	}
          printf("\nProduit scalaire (A,B) : %d", temp);
        }
    }

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par I_Will_Be_back Voir le message
    Je ne comprends pas trop la conversion avec strtol.
    C'est simple. Tu passes une chaine représentant une valeur numérique dans une base de 2 à 36 (10, par exemple), tu passes l'adresse d'un pointeur sur char (ou NULL si tu ne l'utilises pas) et la base de conversion (10, par exemple).

    La fonction retourne la valeur numérique.

    Comme toujours, il faut faire des essais séparément pour vérifier qu'on a bien compris et quel est l'effet des paramètres sur le résultat ...
    J'ai fait les modifications sur mon programme, et j'ai un segmentation fault maintenant >_<

    Vecteur A : -4
    Segmentation fault
    Quels sont les paramètres que tu as passé sur la ligne de commande ? Je vois que tu ne contrôles toujours pas la présence des paramètres avec argc...

    Tu peux déjà corriger ça :
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:67: warning: format argument is not a pointer (arg 2)
    main.c: At top level:
    main.c:10: warning: unused parameter 'argc'
    main.c: In function `main':
    main.c:126: warning: control reaches end of non-void function
    main.c:19: warning: 'Pa' might be used uninitialized in this function
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 0 seconds)
    0 errors, 4 warnings
    Visiblement, tu n'as pas modifié les réglages de ton compilateur ou celui-ci n'est pas assez performant...

    A quoi ça sert que je te donne des conseils si tu ne les suis pas ? Je perds mon temps, c'est ça ? Je parle aux murs ? On se demande ce que tu viens chercher sur un forum...
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    C'est simple. Tu passes une chaine représentant une valeur numérique dans une base de 2 à 36 (10, par exemple), tu passes l'adresse d'un pointeur sur char (ou NULL si tu ne l'utilises pas) et la base de conversion (10, par exemple).

    La fonction retourne la valeur numérique.

    Comme toujours, il faut faire des essais séparément pour vérifier qu'on a bien compris et quel est l'effet des paramètres sur le résultat ...
    J'ai compris a peut pres le fonctionnement.
    long int strtol (const char *nptr, char **endptr, int base);
    La seule chose aue je n'arrive pas a saisir est le fonctionnement de *nptr et **endptr.

    Citation Envoyé par Emmanuel Delahaye Voir le message
    Quels sont les paramètres que tu as passé sur la ligne de commande ? Je vois que tu ne contrôles toujours pas la présence des paramètres avec argc...
    En argument j'ai rentre : 1 6

    Citation Envoyé par Emmanuel Delahaye Voir le message
    Tu peux déjà corriger ça :
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:67: warning: format argument is not a pointer (arg 2)
    main.c: At top level:
    main.c:10: warning: unused parameter 'argc'
    main.c: In function `main':
    main.c:126: warning: control reaches end of non-void function
    main.c:19: warning: 'Pa' might be used uninitialized in this function
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 0 seconds)
    0 errors, 4 warnings
    Visiblement, tu n'as pas modifié les réglages de ton compilateur ou celui-ci n'est pas assez performant...

    A quoi ça sert que je te donne des conseils si tu ne les suis pas ? Je perds mon temps, c'est ça ? Je parle aux murs ? On se demande ce que tu viens chercher sur un forum...
    C'est pas que je veux pas suivre tes conseils c'est que je ne peux pas. Ne travaillant pas chez moi je n'ai pas le droit de modifier le compilateur


    EDIT : Apres qq recherche ca marche mais il ne prend en compte que mon premier argument. Il ne fait donc qu'une seule boucle en ignorant mon second argument qui doit lui donner le nombre de chiffre a afficher.

Discussions similaires

  1. petit problème d'affichage
    Par Agrapheuse dans le forum Applets
    Réponses: 1
    Dernier message: 19/04/2008, 16h52
  2. Petit problème d'affichage
    Par dan_lizhot dans le forum Débuter
    Réponses: 0
    Dernier message: 01/02/2008, 04h56
  3. [AJAX] Affichage en Ajax
    Par RichardP dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/05/2007, 16h02
  4. petit problème d'affichage sur un datagridview
    Par boss_gama dans le forum C#
    Réponses: 5
    Dernier message: 01/05/2007, 21h42
  5. petit problème d'affichage
    Par soria_t dans le forum C
    Réponses: 18
    Dernier message: 20/03/2007, 14h40

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