1
votes

C ++: Lors de la saisie de nombres dans le tableau, le premier nombre est 0

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 commentaires

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 comme int many [p]; donc le dernier membre est many [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é.


3 Réponses :


3
votes

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.


0 commentaires

0
votes

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);
}


0 commentaires

0
votes

Il y a beaucoup de choses ici qui n'ont pas de sens.

  • Vous commencez par sum = 1. c'est pourquoi la valeur est toujours +1
  • many est un tableau de taille 1, peut être changé en un seul int.
  • vous accédez à 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,


0 commentaires