Transtypage forcé

Transtypage forcé - C++ - Programmation

Marsh Posté le 24-09-2006 à 22:35:31    

Soit le programme suivant :
 

int main() {
 int a, somme, nb = 0;
 cout << "Veuillez saisir des nombres pour en calculer la moyenne" << endl;
 
 while (1) {
  cin >> a;
  if ( a < 0 )
   break;
  somme += a;
  nb++;
 }
 
 cout << "La moyenne est de : " << (float) somme / nb << endl;
   
}


 
Ce programme ajoute  une suite de nombre non négatif pour en calculer la moyenne.  
Si le transtypage de la division n'a pas lieu je me retrouve avec un resultat totalement à l'ouest, pourtant il s'agit d'un division entier par entier et il ne devrait pas y'avoir d'erreur.
 
Avec transtypage (float)

Veuillez saisir des nombres pour en calculer la moyenne
30 31 32 -7
La moyenne est de : 31


 
Sans transtypage (float)

Veuillez saisir des nombres pour en calculer la moyenne
30 31 32 -7
La moyenne est de : -403250242

Reply

Marsh Posté le 24-09-2006 à 22:35:31   

Reply

Marsh Posté le 24-09-2006 à 22:52:38    

initialise à somme 0 par exemple.

Reply

Marsh Posté le 24-09-2006 à 23:06:59    

fra0 a écrit :

initialise à somme 0 par exemple.


Quel oubli ! j'ai honte... merci !
Cela dit, il est marrant de voir que le transtypage rattrape la gaffe même si le pourquoi du comment reste obscur.

Reply

Marsh Posté le 24-09-2006 à 23:12:27    

ketch a écrit :

[...]
Cela dit, il est marrant de voir que le transtypage rattrape la gaffe même si le pourquoi du comment reste obscur.


 
ça marche, maintenant, chez toi, sur ta machine....

Reply

Marsh Posté le 25-09-2006 à 09:40:07    

c'est pas une histoire d'initialiser. Il faut que tu vérifies le retour de cin.
 
if (cin >> a) { OK } else { KO }

Reply

Marsh Posté le 25-09-2006 à 20:59:50    

Taz espèce de quiche, c'est PRINCIPALEMENT un problème d'initialisation,
 
'somme' est un POD non const, non statique sa valeur de départ est indéterminée (§8.5.9).
 

Reply

Marsh Posté le 25-09-2006 à 21:12:38    

ouais ben y a les deux problèmes :o

Reply

Marsh Posté le 25-09-2006 à 21:54:41    

A vrai dire, ces deux problèmes sont tout en bas de la liste des problèmes,
mais j'ai pas envie d'épiloguer.


Message édité par fra0 le 26-09-2006 à 00:54:57
Reply

Marsh Posté le 28-09-2006 à 23:12:53    

fra0 a écrit :

'somme' est un POD non const, non statique sa valeur de départ est indéterminée (§8.5.9).


 
S'il n'y a pas "d'initializer".

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed