Problème d'Affichage

temac Messages postés 1 Date d'inscription samedi 10 novembre 2007 Statut Membre Dernière intervention 10 novembre 2007 - 10 nov. 2007 à 09:37
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 10 nov. 2007 à 16:37
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 :

#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);
    }    
}

6 réponses

gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
10 nov. 2007 à 13:54
if(*argv[1] == 1) devrai plutot etre if (strcmp(argv[1],"1"))
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
10 nov. 2007 à 14:42
if(*argv[1] == '1') plutot.
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
10 nov. 2007 à 14:44
c'est la meme chose soit tu verifie le premier caractere ou comme moi la chaine au complet
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 nov. 2007 à 14:57
Non ce n'est pas la même chose. Le problème avec la méthode de luhtor c'est que si il entre 14, il sera considéré comme un 1.
Le problème avec ta méthode c'est le strcmp. Premièrement, strcmp retourne 0 si les chaines sont identiques. Ensuite, même si cette fonction sera probablement "inlinée", je doute que ce soit plus rapide que:

if(argv[1][0] == '1' && !argv[1][1])

ou

if(!argv[1][1]) {
    if(*argv[1] == '1')
    ...
    else if(*argv[1] == '2')
    ...
    else if(*argv[1] == '3')
    ...
}

pour ainsi englober tout les tests sur argv.

C++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
10 nov. 2007 à 16:00
a oui j'ai taper trop vite jai oublier le ! avant la fonction

je suis d'accord que strcmp est moin rapide que verifier 2 caractere directement
mais il ne faut jamais prevoir qu'il y aura que 2 caracteres car il pux avoir 800 ou 1234
et un strcmp au debut du programme et utilisé qu'une fois ne fera pas trop de difference surtout dans ce type de code
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 nov. 2007 à 16:37
Non strcmp sera utilisé pour chaque test sur argv[1] donc, ici, jusqu'à 3 fois (dans le cas de l'utilisation des else if)
Ensuite, oui c'est sûr que l'on ne peux prévoir mais ici, il ne sagit que d'un simple menu qui reste assez basique donc il n'y aura pas 800 possibilitées.

C++ (@++)<!--
0
Rejoignez-nous