Ca coince quelque part(C)

Bonjour a tous ,
J’ai beau tourner ce code dans tous les sens , je n’arrive pas a appliquer mes remises sur les prix . Plus j’essaie , plus je m’enfonce et plus je m’explose les yeux .
Donc je sollicite votre aide bienveillante . Merci

#include <stdio.h>
#define prixCle 10
#define prixOrdi 500
int calcul(int nArticle,int prix);

int main(void)
{
 int choix,remiseIm,nArticle,remise,prix;
 choix=0;prix=0;remise=0;remiseIm=0;nArticle=0;

 puts("************************************************\n");
 puts("*********|BIENVENUE CHEZ OIM|*******************\n");
 puts("************************************************\n");

 puts("Article disponible en stock:\n");

 puts("\tCHOIX 1:cle usb");
 puts("\t(prix a l'unité: 10 euros)\n");

 puts("\tCHOIX 2:ordinateur portable(10%% remise immédiate)");
 puts("\t(prix a l'unité: 500 euros)\n");

 puts("\t10 article acheté,5%% de remise sur tous les articles");
 puts("\t50 article acheté,10%% de remise sur tous les articles\n");

 printf("Quel est votre choix?\n");
 scanf("%d",&choix);
 while((choix!=1)&&(choix!=2))
   {
    printf("Mauvais choix,recommencez\n");
    scanf("%d",&choix);
   }

 printf("Combien d'article désirez vous?\n"); 
 scanf("%d",&nArticle); 
  
 switch(choix)
 {
  case 1:
      prix=calcul(nArticle,prixCle);
      printf("Vous avez choisis %d cle usb\n",nArticle);
      printf("Votre montant total sera de:%d Euros\n",prix);
      break; 
  case 2:
      prix=calcul(nArticle,prixOrdi);
      remiseIm=(prixOrdi*10)/100;
      prix=prix-remiseIm;
      printf("Vous avez choisis %d ordinateurs portable\n",nArticle);
      printf("Votre montant total sera de:%d Euros\n",prix);
      break;
  default:
     printf("Mauvais choix!\n");
      break;
  }
 return 0;
 }

 int calcul(int nArticle,int prix)
 {int remise=0,result=0;
   if((nArticle>=10) && (nArticle<50))
     {
      remise=(prix*5)/100;
      result=prix-remise;
      result=result*nArticle;
     }
   else if(nArticle>=50)
     {
      remise=(prix*10)/100;
      result=prix-remise;
      result=result*nArticle;
     }
   else
     {
      result=prix*nArticle;
     }
   return result;
 }

Bonjour,

J’ai du mal à lire le code car rien n’est indenté, c’est dommage.

Et sur mon navigateur, dans la fonction “calcul”, je ne vois aucun signe de multiplication dans les calculs de remise, est-ce normal ?

Sinon j’aurai plutôt écrit :

remise = (prix * 10) / 100; ou remise = prix * 0.1
prix = prix - remise;
result = prix * nArticle;

Au pire mets des print par ci par là pour voir ce qui se passe…

Désolé. Je n’ai pas été fichu de mettre le code en page correctement, pourtant , il etait indenté . Mais la , ca pique les yeux , tant pis pour cette fois .

Bonsoir,
Attention au divisions, je me suis bien cassé la tête dessus.
Si jamais ton prix est de type double(genre 45.95€), et que tu divise par un entier(int) dans ton cas 100, cela peut créer des problème genre bien lourd !!
je te conseil de diviser par 100.0, par un double donc…
bonne soirée
edit: je viens de voir que tout est en int, mais dans le doute !
sinon une remise de -10% c’est prixremisé= prix/1.1(n’importe quoi), prix-(prix*0.1)
trouver un montant sans TVA à 20% par exemple c’est prix/1.2

1 J'aime

Bonne remarque, vu que les prix vont tous se retrouver en nombre à virgule, il serait plutôt judicieux de passer toutes les variables de prix (et de remise) en float et pas en int. Le souci vient sans doute de là.

Merci a tous pour vos remarque pertinente . Je vais tout passer en float pour voir si ca fonctionne et surtout si ca correspond précisément au résultat .

Cette fois ci , ca fonctionne , mais j’aimerai remplacer scanf par fgets pour plus de securité a la saisie , mais je n’arrive pas a l’adapter a mon code . Enfin , fgets ou autre chose puisque scanf , c’est tout pourri :slightly_smiling_face:
Pouvez vous me venir en aide ?

    #include <stdio.h>
    #define prixCle 10
    #define prixOrdi 500
    float calcul(int nArticle,float prix);

    int main(void)
    {
     char tab[3];
     float remiseIm,remise,prix,result,paiement,billet500;
     int nArticle,choix,billet100,billet50,billet10,pieces2,pieces1,
    rendu;
     choix=0;prix=0;remise=0;remiseIm=0;nArticle=0;paiement=0; result=0;rendu=0;billet100=0;billet50=0;billet10=0;pieces2=0;
     pieces1=0;
     puts("***************************************************\n");
    puts("********** |BIENVENUE CHEZ OIM| *******************\n");
    puts("***************************************************\n");

     puts("Article disponible en stock:\n");

     puts("\tCHOIX 1:cle usb");
     puts("\t(prix a l'unité: 10 euros)\n");

     puts("\tCHOIX 2:ordinateur portable(10%% remise supplementaire)");
     puts("\t(prix a l'unité: 500 euros)\n");

     puts("\t10 article acheté,5%% de remise sur tous les articles");
     puts("\t50 article acheté,10%% de remise sur tous les articles\n");

     printf("Quel est votre choix?\n");
     scanf("%d",&choix);
     while((choix!=1)&&(choix!=2))
       {
        printf("Mauvais choix,recommencez\n");
        scanf("%d",&choix);
       }
     do
       {printf("Combien d'article désirez vous?\n"); 
        scanf("%d",&nArticle); 
       }while(nArticle<1);
     
     switch(choix)
     {
      case 1:
          result=calcul(nArticle,prixCle);
          printf("Vous avez choisis %d cle usb\n",nArticle);
          printf("Votre montant total sera de:%4.0f Euros\n",result);
          break; 
      case 2:
          
          result=calcul(nArticle,prixOrdi);
          printf("Vous avez choisis %d ordinateurs portable\n",nArticle);
          printf("Votre montant total sera de:%5.0f Euros\n",result);
          remise=(result*10)/100;
          result=result-remise;
          printf("Le montant total apres remise supplémentaire:%5.0f Euros\n",result);
          break;
      default:
          break;
     }
     printf("\n\n");
     printf("________________________ PAIEMENT_________________________\n\n");
     printf("Paiement par espece seulement disponible!\n");
     printf("Quel sera le montant de votre paiement?\n");
     scanf("%f",&paiement);

     if(paiement<result)
       { printf("Votre paiement est insuffisant!\n");
         while(paiement<result)
         { printf("Entrez un montant plus élevé\n");
           scanf("%f",&paiement);
         }
       }
     else if(paiement==result)
      printf("Aucune monnaie a vous rendre\n");
     else(paiement>result);
     {
       rendu=paiement-result;
       billet100=rendu/100;
       rendu %= 100;
       billet50=rendu/50;
       rendu %= 50;
       billet10=rendu/10;
       rendu %= 10;
       pieces2=rendu/2;
       rendu %= 2;
       pieces1=rendu/1;
       rendu %= 1;

     printf("\n______________ MONNAIE RENDUE _____________________\n\n");
     printf("Nombre de billet de 100 Euros: %d\n",billet100);
     printf("Nombre de billet de 50 Euros: %d\n",billet50);
     printf("Nombre de bilet de 10 Euros: %d\n",billet10);
     printf("Nombre de pieces de 2 Euros: %d\n",pieces2);
     printf("Nombre de pieces de 1 Euros: %d\n",pieces1);
     }
     printf("\n\n");
     printf("\t--> code promo pour un futur achat\"MANGER DES POMMES!\"\n");

     return 0;
    }

     float calcul(int nArticle,float prix)
     {float remise=0,result=0;
       if((nArticle>=10) && (nArticle<50))
         {
          remise=(prix*5)/100;
          result=prix-remise;
          result=result*nArticle;
         }
       else if(nArticle>=50)
         {
          remise=(prix*10)/100;
          result=prix-remise;
          result=result*nArticle;
         }
       else
         {
          result=prix*nArticle;
         }
       return result;
     }