Pk ce programme ne fonctionne pas ?langage C

Fermé
unmec13 - Modifié par unmec13 le 30/09/2010 à 22:18
 unmec13 - 1 oct. 2010 à 00:26
Bonjour,

Je voudrai bien savoir pourquoi ce programme ne marche pas et bloque lorsque je le lance :


# include <stdio.h>

int main()
{
float s,x,varret;

s=0;
varret=10;

while(x!=varret){
printf("Rentrez une valeur a additionner");
scanf("%f",x);
s=s+x;
}
printf("Le résultat est : %f",s);

return;
}




Mon but étant de créer un programme qui additionne tous les chiffres que l'on rentre jusqu'à une certaine valeur et dans mon cas c'est 10

4 réponses

Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
30 sept. 2010 à 22:44
Bonsoir,
Je pense qu'il s'agit du return :
return 0;


@+
0
bonsoir Gord...non j'ai essayé ce n'est pas ça

Quand je lance ce programme j'ai un message :

"un programme a fait que le programme a cessé..."

Ca ma jamais fait ça tu peux tester chez toi si ça marche ? car jtrouve ça louche j'ai pas fait de grosses erreurs il me semble
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
30 sept. 2010 à 23:27
Plusieurs fautes dans votre code :
#include <stdio.h> 
#include <stdlib.h>

int main(void) 
{ 
double s,x,varret; 

s=0; 
varret=10; 

while((int)x!=(int)varret){ 
  printf("Rentrez une valeur a additionner"); 
  scanf("%lf",&x); 
  s=s+x; 
} 
printf("Le résultat est : %f\n",s); 


system("PAUSE");
return 0; 
}

Pour info, j'ai casté (int) la condition x et varret car il ne faut pas comparer des nombres flottants de cette façon à cause de l'architecture interne du PC. Il faut voir si la différence est inférieur à 10e-5 par exemple. Pour simplifier j'ai donc casté.
0
Slt fiddy c'est encore moi depuis la dernière fois et l'histoire des KWH loool

Là encore j'ai besoin de toi...mais j'ai pas encore étudié le stdlib.h le systeme PAUSE et le (int) avant x et varret

donc jme dit peut-etre que ya un autre moyen plus simpliste pour le faire

Ou alors l'exo est fait exprés pour qu'on sache de nous même le faire looool
0
jte remet le sujet tel que au moins tu vois exactement :

Ecrire un programme qui affiche la somme d'une suite de nombres fournis par l'utilisateur et qui se termine par une valeur particuliere, varret, qui n'en fait pas partie.
varret est fournit par l'utilisateur en premier
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
30 sept. 2010 à 23:54
Ah, j'avais même pas tilté :-).

Quelques remarques :
Pourquoi utiliser des float/double alors ? Utilise simplement des int.

Le system("PAUSE") c'est juste pour éviter que la fenêtre ne se referme à la fin du programme. Sinon, tu risques de voir la fenêtre se refermer aussitôt sans que tu aies le temps de lire "le résultat est". Teste sans, tu comprendras le problème. Si ça te gène, tu peux remplacer par un scanf bidon.

varret est fournit par l'utilisateur en premier
Je pense qu'il faut faire aussi un scanf pour varret. Non ?

affiche la somme d'une suite de nombres fournis par l'utilisateur et qui se termine par une valeur particuliere, varret, qui n'en fait pas partie.
Toi tu as compté le varret dans la somme. Regarde bien ;-))).
0
Pourquoi utiliser des float/double alors ? Utilise simplement des int.
Il me semble que la prof a dit que si on sait pas la taille mieux vaut mettre Float afin qu'il puisse accueillir de grandes valeurs...remarque on travaillait sur un exo avec x^n a ce moment là c'est peut-être pour ça

Le system("PAUSE") c'est juste...
Ok je connaissais pas...moi je faisais vite un IMPRIM ECRAN pour voir le résultat à chaque fois lool

J'ai essayé avec ce que tu m'as donné de rajouter un
Printf("choisissez la varret");
scanf("%f",&varret);


mais apparemment c'est pas ça car le programme s'arrete juste aprés avoir rentré cette valeur en me mettant le résultat est 0.00000


Et je voulais savoir si le SYSTEM PAUSE il était lié au STDLIB ou je peux l'utiliser seulement avec STDIO ???
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
1 oct. 2010 à 00:16
Printf("choisissez la varret");
scanf("%f",&varret);
Normal, varret est de type double dans mon exemple. Il faut donc mettre : scanf("%lf",&varret); (L minuscule).

La fonction system appartient au header stdlib.h.
0
Ok c'est vraiment des fautes bêtes que je fais c'est incroyable....

Merci encore bcp pour tout jte dirai si ya une réponse plus facile ;-) bonne soirée :-)
0