Essayer de créer une calculatrice qui calcule les valeurs dans un tableau en fonction des entrées de l'utilisateur. Mais la première valeur du tableau est toujours 0 quand je laisse 'p indéfini ou p = 1 m'aura posé le même problème. Il doit être celui que l'utilisateur saisit pour la première valeur et ainsi de suite.
How many numbers are you working with today? 2 Enter number 1: 1 What would you like the numbers to do: (+ - / *) + Enter number 2: 2 What would you like the numbers to do: (+ - / *) + 4
La somme doit être 3 et non 4.
#include <iostream> using namespace std; int main() { double x; int p = 1, y = 0; double sum = 1; int many[p]; char op; cout << "How many numbers are you working with today?" << endl; cin >> x; do { if (y > x) break; cout << "Enter number " << y + 1 << ":" << endl; cin >> many[p]; cout << "What would you like the numbers to do: (+ - / *)" << endl; cin >> op; if (op == '+') { sum+=many[p]; cout << sum <<endl; } else if (op == '-') { sum-=many[p]; cout << sum <<endl; } else if (op == '*') { sum*=many[p]; cout << sum <<endl; } else if (op == '/') { sum/=many[p]; cout << sum <<endl; } else {cout << "ERROR: Enter correct value." << endl;} y++; } while (y < x); }
3 Réponses :
Le programme n'est pas valide et a un comportement indéfini.
Pour les débutants, les tableaux de longueur variable ne sont pas une fonctionnalité C + standard
cin >> many[p];
Et dans tous les cas, vous avez défini un tableau avec un élément. Donc, le seul index valide pour accéder aux éléments du tableau est 0.
Même dans la première instruction qui utilise le tableau
int p = 1, y = 0; double sum = 1; int many[p];
il est accessible en dehors de son limites.
Vous devez utiliser le modèle de classe standard std :: vector
. Ou comme en fait vous avez affaire à une valeur, il n'y a même pas de sens d'utiliser un conteneur, définissez un objet scalaire au lieu du tableau.
La valeur initiale de la somme est 1, c'est pourquoi elle en ajoute 1 de plus. Nous ne pouvons pas non plus le garder à 0, car cela gâcherait les cas '*' et '/'. J'ai ajouté la valeur de la somme initiale pour tous les cas. De plus, je vous suggère d’utiliser des instructions switch cases au lieu des instructions if, else.
#include <iostream> using namespace std; int main() { double x; int p = 1, y = 0; double sum = 1; int many[p]; char op; cout << "How many numbers are you working with today?" << endl; cin >> x; do { if (y > x) break; cout << "Enter number " << y + 1 << ":" << endl; cin >> many[p]; cout << "What would you like the numbers to do: (+ - / *)" << endl; cin >> op; if (op == '+') { if (y == 0) { sum = 0; } sum+=many[p]; cout << sum <<endl; } else if (op == '-') { if (y == 0) { sum = 0; } sum-=many[p]; cout << sum <<endl; } else if (op == '*') { if (y == 0) { sum = 1; } sum*=many[p]; cout << sum <<endl; } else if (op == '/') { if (y == 0) { sum = 1; } sum/=many[p]; cout << sum <<endl; } else {cout << "ERROR: Enter correct value." << endl;} y++; } while (y < x); }
Il y a beaucoup de choses ici qui n'ont pas de sens.
many
est un tableau de taille 1, peut être changé en un seul int. plusieurs [p]
qui est beaucoup [1]
qui est hors limites. vous ne pouvez accéder qu'à many[0ITED
le reste, je vous laisse le soin de trouver,
Pourquoi utilisez-vous array dans ce cas? D'après ce que je peux voir dans votre code, c'est que vous essayez simplement d'effectuer des opérations mathématiques répétitives, n'est-ce pas?
Vous avez un comportement non défini, car votre tentative de lecture ou d’écriture de
plusieurs [p]
est hors limites. Vous avez déclaré le tableau commeint many [p];
donc le dernier membre estmany [p-1]
. Mais, comme l'a dit @uglyCoder, pourquoi avez-vous même besoin d'un tableau ici? De plus, les tableaux de longueur variable (VLA) ne sont pas standard C ++ !!La raison pour laquelle la somme est 4 et non 3 est que votre variable de somme commence à 1. Vous devriez plutôt définir la somme sur le premier nombre entré (à partir de 1 casse l'addition; à partir de 0 interrompt la multiplication), et corriger le comportement indéfini que @AdrianMole a mentionné.