Transtypage forcé - C++ - Programmation
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.
Marsh Posté le 24-09-2006 à 23:12:27
ketch a écrit : [...] |
ça marche, maintenant, chez toi, sur ta machine....
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 }
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).
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.
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".
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