Faire une repetition dans un code C

Résolu/Fermé
amanda17 Messages postés 70 Date d'inscription vendredi 29 octobre 2010 Statut Membre Dernière intervention 31 octobre 2010 - 29 oct. 2010 à 22:24
amanda17 Messages postés 70 Date d'inscription vendredi 29 octobre 2010 Statut Membre Dernière intervention 31 octobre 2010 - 30 oct. 2010 à 11:30
Bonjour,


Bonjour,


Voila enfait j'aimerais faire une repetition dans mon programme en C Mais je veux que avant que la repetition sois fait il faudrait quon appuie sur une touche voivi mon code : les trucs en majuscules sont les coin ou je veux mettre les repetition :

Merci Beaucoupp !!

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
double resultat = 0, resultat1 = 0, nombre1 = 0, nombre2 = 0, nombre3 = 0, nombre4 = 0, resultat0 = 0;
nombre2 = 3.667;
nombre3 = 510;
nombre4 = 0.275;
resultat0 = 0;
printf("Creer par Amanda Copyright 2010\n\n\n");
// On demande les nombres 1 et 2 à l'utilisateur :

printf("Entrez la somme en dirham : ");
scanf("%d", &nombre1);
printf("\n\n\n");

// On fait le calcul :

ICI J'AIMERAI FAIRE UNE REPETITION MAIS FAUDRAIT QUON APPUIE SUR NIMPORTE QUELLE TOUCHE AVANT !

resultat = nombre1 / nombre2 * nombre3;
resultat1 = resultat * nombre4;
resultat0 = resultat + resultat1;


// Et on affiche l'addition à l'écran :

printf ("La somme en CFA est de : %d\n", resultat0);
printf ("\n\n\n");
return 0;
}


A voir également:

8 réponses

J'ai tenté de reproduire ton programme, c'est le même que le tiens sauf qu'il demande si il recommance ou non. Je l'ai fait assez vite donc quelques details peuvent être changer bien sur.


#include <stdio.h>


int calcul(nombre1)
{
double resultat = 0;
double resultat1 = 0;
double nombre2 = 3.667;
int nombre3 = 510;
double nombre4 = 0.275;
double resultat0 = 0;

resultat = nombre1 / nombre2 * nombre3;
resultat1 = resultat * nombre4;
resultat0 = resultat + resultat1;
return(resultat0);
}

int main()
{
double nombre1 = 0;
int repet = 1;
printf("Creer par Amanda Copyright 2010\n\n\n");
while(repet==1)
{

// On demande les nombres 1 et 2 à l'utilisateur :

printf("\nEntrez la somme en dirham : ");
scanf("%d", &nombre1);
fflush(stdin);
printf("\n\n\n");
calcul(nombre1);
printf("La somme en CFA est de : %ld\n", calcul());
printf("\n\n\n");
printf("Voulez-vous recommencer ?\n1.Oui\n2.Non\n");
scanf("%d",&repet);
fflush(stdin);

}
return 1;
}


Ne connaissant pas ce que represente CFA je ne peux vérifié si la conversion est bonne, sinon je trouve le même resultat que toi.
2
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
30 oct. 2010 à 00:52
Je répète : le fflush(stdin) provoque un comportement indéfini...
0
amanda17 Messages postés 70 Date d'inscription vendredi 29 octobre 2010 Statut Membre Dernière intervention 31 octobre 2010 11
30 oct. 2010 à 02:21
C'est avec ce code que j'ai reussi a faire ce que je voulais merci encore :) et cfa enfait c la monnaie en cote divoire c comme leuro en france :P
0
Utilisateur anonyme
30 oct. 2010 à 11:28
Elle peux l'enlever ^^ Je l'ai fait assez vite avec mes habitudes plus ou moins mauvaises
0
amanda17 Messages postés 70 Date d'inscription vendredi 29 octobre 2010 Statut Membre Dernière intervention 31 octobre 2010 11
30 oct. 2010 à 11:30
Je l'ai laisser tel qu'il est :P Il fonctionne super bien comme ca :)
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 142
29 oct. 2010 à 22:32
Alors d'abord un bon conseil (tu verra ca finira par être super utile dans des programmes plus longs) : pour tes variables met pasnombre1, nombre2...
utilise des noms de variables clairs qui te permettent de savoir tout de suite ce que représente ta variable
pour tes variables tu peux les initialiser a la bonne valeur dès le début pas besoin d'initialiser a 0 et de changer leur valeur après


par contre que veut tu dire par faire une répétition?


ps : ca fait longtemps que j'ai pas fais de C mais il me semble qu'il faut un system ("PAUSE") sinon ton programme se ferme tout de suite (mais absolument plus sur et si il faut je suis plus sur que ca s'écrive comme ca^^)
1
Pour attendre l'appui d'une touche " getchar() " . En clair sa met le programme en pause et attend un appui
0
amanda17 Messages postés 70 Date d'inscription vendredi 29 octobre 2010 Statut Membre Dernière intervention 31 octobre 2010 11
29 oct. 2010 à 22:43
Merci beaucoup s6t6n
Bon voila oliver en fait le logiciel est censer faire un calcule c'est a dire souvent quand je voyage je vais dans des magasin et la je peux taper le prix et il le convertie en meme temps avec la taxe et tout mais la il faut a chaque fois
que quand je fais un calcule faut que je ferme et relance le prog alors j'aimerais savoir si il existe une maniere de faire tel que si je mets comme valeur 50 il me met le resultat et ensuite il affiche en bas une nouvelle fois Entrez le nombre en dirham : voila quoi pour ne pas a avoir fermer et ouvrir tout le temps merci beaucoup j'attend vos reponses avec impatiente :)
0

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

Posez votre question
amanda17 Messages postés 70 Date d'inscription vendredi 29 octobre 2010 Statut Membre Dernière intervention 31 octobre 2010 11
29 oct. 2010 à 22:43
Je sais pas si o lieu de dire repetition je dois dire Boucle ;)
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 142
29 oct. 2010 à 22:52
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
double resultat = 0, resultat1 = 0, nombre1 = 0, nombre2 = 0, nombre3 = 0, nombre4 = 0, resultat0 = 0;
nombre2 = 3.667;
nombre3 = 510;
nombre4 = 0.275;
resultat0 = 0;
printf("Creer par Amanda Copyright 2010\n\n\n");
// On demande les nombres 1 et 2 à l'utilisateur :

printf("Entrez la somme en dirham : ");
scanf("%d", &nombre1);
printf("\n\n\n");

// On fait le calcul :

ICI J'AIMERAI FAIRE UNE REPETITION MAIS FAUDRAIT QUON APPUIE SUR NIMPORTE QUELLE TOUCHE AVANT !

resultat = nombre1 / nombre2 * nombre3;
resultat1 = resultat * nombre4;
resultat0 = resultat + resultat1;


// Et on affiche l'addition à l'écran :

printf ("La somme en CFA est de : %d\n", resultat0);
printf ("\n\n\n");
return 0;
}


je reprend ton code pour expliquer^^

en gros il te faut juste une boucle qui te permet de relancer le programme autant de fois que tu veux
j'imagine que tu connais les différentes boucles en C (while, for, do...while)
dans ton cas le plus simple est d'utiliser une boucle while qui prend toute la partie calcul de ton programme mais tu l'a place au mauvais endroit sur ton code au dessus : si tu la met la ou tu l'a écrit ta boucle va uniquement refaire le même calcul et t'afficher le résultat
il faut donc mettre le début de ta boucle plus haut pour entrez a nouveau le prix ce qui te permettra de faire 50 calculs différents a la suite


pour utiliser ta boucle il te faut une condition (while (condition))
tu peux évidemment mettre while (1) qui signifie en gros while (vrai) mais tu ne sortira jamais de ta boucle
donc il faut déclarer une nouvelle variable qui te servira uniquement a ta boucle (pour reprendre ce que je t'ai dit sur les variables on va l'appeler "recommencer"^^)

tu aura donc une boucle while (recommencer == 1) (par exemple)
'ton programme'

il y a évidemment deux problèmes :
le premier il faut penser a initialiser ta variable a 1 (ou n'importe quelle autre valeur tant que c'est la même que dans ta boucle)
ensuite tu sera pris dans une boucle infinie (en gros la valeur de ta variable ne change jamais donc tu pourra faire ton calcul 50 fois mais après tu ne pourra pas fermer ton programme proprement)

tu dois donc rajouter une condition a la fin
tu demande si on veut recommencer ou non
si oui tu ne fait rien donc tu sort de la condition et refait un "tour" de ta boucle
si non tu modifie la valeur de ta variable pour qu'elle soit différente de 1 tu sort de ta condition puis de ta boucle et ton programme se ferme normalement


voila tu as tout ce qu'il te faut pour ton programme


(si tu veux un bon site pour apprendre le C va sur le site du zero c'est un très bon site pour débuter)
0
J'ai une solution toute bete tu met

int main(blabla)
{
int tesvariable;
int repet = 1;
while(repet==1);
{

Programme

printf("Voulez vous recommencer ce programme ?\n1.Oui\n2.Non\n");
scanf("%d",&repet);
fflush(stdin); // efface la valeur enregistrer dans le scanf, c'est plus propre.
return 0;
}; //fin while
}//fin main


Je ne voit pas l'utilité de mettre " int main(int argc, char *argv[]) " " int main()" suffit
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
29 oct. 2010 à 23:44
Bonjour,
Des petites corrections à ton programme :
scanf("%d",repet);
Attention, tu as oublié de mettre l'esperluette => scanf("%d",&repet);

fflush(stdin); // efface la valeur enregistrer dans le scanf, c'est plus propre.
Non fflush ne peut pas être utilisé sur un flux d'entrée. Il faut le faire manuellement. Un simple getchar() peut faire l'affaire. Ou mieux un getchar dans une boucle while.

}; //fin while
Pas besoin de point virgule.

Je ne voit pas l'utilité de mettre " int main(int argc, char *argv[]) " " int main()" suffit
Effectivement, pas d'utilité. Par contre, on met : int main(void) et non int main() tout court en C. Cela permet de déclarer entièrement la fonction main.

Cdlt,
0
Utilisateur anonyme
29 oct. 2010 à 23:50
Sur linux la fonction int main() suffit et sous widows void main() suffit ^^ ou void main(void) sa dépend des compilateur
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
29 oct. 2010 à 23:58
Ce n'est pas parce que ça marche qu'il faut faire ainsi.
Le C est un langage normé. Et la norme dit qu'il faut mettre : int main (void) ou int main (int argc, int **argv) (ou *argv[]).
void main() est faux car le programme appelant attend une valeur retour (0 pour dire que tout s'est bien déroulé)
.
sa dépend des compilateur
Non ça ne dépend pas des compilateurs. Si le compilateur est conforme alors il devra t'avertir pour le void main() et générer un warning. Si ce n'est pas le cas, peut-être que les options sont mal paramétrées, sinon il vaut mieux en changer et en prendre un standard.

Cdlt,
0
amanda17 Messages postés 70 Date d'inscription vendredi 29 octobre 2010 Statut Membre Dernière intervention 31 octobre 2010 11
30 oct. 2010 à 02:19
Merci beaucoup beaucoup à tout surtout à s6t6n ton code c'est exactement ce que je voulais merci beaucoup à tous comme vous le voyez je suis debutante et j'ai appris sur le site du zero mais j'ai pas tout lue, je suis du genre à toujours vouloir essayez quelquechose de nouveau je vous remercie tous !!! <3 <3 <3
0