7
votes

boucle à travers un tableau en C ++

Je veux faire boucle via un tableau que j'ai une valeur maximale de 1000. Je remplisse la matrice avec des valeurs à partir d'un fichier texte. J'essaie de faire boucle à travers ce tableau mais dans ma boucle, je ne connais pas la longueur de la matrice, alors je ne sais pas quoi mettre dans la deuxième partie de la déclaration de boucle. Par exemple: j'ai un tableau appelé: int scores [1000]; et j'essaie de parcourir ce tableau et de mettre des scores dans une catégorie de grade. Donc, A = 90-100, B = 80-89, C = 70-79, D = 60-69, F = 0-59.

Donc je ne sais donc pas ce que ma boucle à ressemblerait à: XXX

Je suppose que je suis également confondu de savoir comment obtenir le nombre total de chaque catégorie à la fin. Mais pour la plupart, c'est comment itération à travers ce tableau. Je sais que la taille de (scores []) ne fonctionnera pas parce que cela me donnera la taille int et non la longueur de la matrice elle-même. Merci bien qu'à l'avance!


0 commentaires

4 Réponses :


6
votes

3 commentaires

Malheureusement, je dois rester avec des tableaux, je connais déjà des vecteurs et les choisirais facilement en raison de la flexibilité qu'ils sont souples, mais comme un défi, je fais des matrices pour cela.


D'accord, alors vous devez simplement garder un compteur sur le nombre de valeurs que vous avez placées dans le tableau. Une autre idée (probablement pire) initialiserait toutes les 1000 valeurs à une valeur que vous n'utilisez jamais (peut-être -1), puis une boucle ultérieure jusqu'à ce que vous frappiez l'une de ces -1. Je garderais un comptoir.


J'ai un comptoir appelé Scorecount qui fait cela, pourriez-vous me montrer s'il vous plaît en utilisant cet exemple de ce que ma boucle ressemblerait?



2
votes

Lorsque vous remplissez les scores code> code>, vous devez compter en réalité le nombre d'articles que vous avez mis. Ensuite, vous vous souvenez de ce nombre et utilisez-le pour l'itération plus tard. Par exemple, vous avez peut-être lu vos scores comme celui-ci:

// Read some scores: Stop when -1 is entered, an error occurs, or 1000 values are read.
int num_scores = 0;

for( ; num_scores < 1000; num_scores++ )
{
    if( !(cin >> scores[num_scores]) || scores[num_scores] == -1 ) break;
}

// Do stuff with scores...
for(int i = 0; i < num_scores; i++) {
    ...
}
  • Utilisez une valeur sentinelle pour représenter la fin des données, telles qu'un score de -1. LI>
  • Utilisez un std :: vecteur code> à la place. li> ul>

    D'ailleurs, la déclaration logique à l'intérieur de votre boucle sera toujours vraie. Êtes-vous sûr que vous ne vouliez pas utiliser && code> au lieu de || code>? P> p> p>


2 commentaires

Ouais je veux ou non et parce que si le score est compris entre 90 et un 100, c'est un A et je veux mettre cela dans un comptoir. Donc, à la fin de l'itération à travers la matrice, il y a un nombre de bulles d'A B, C ECT.


@ user12074577, ce qui signifie que vous voulez un "et". 50 est-il supérieur à 90 ou inférieur à 100?



8
votes

en réalité la taille de () devrait être fait comme ceci:

tailleOf (scores) / taille de (scores [0])

Et cela vous donnera le nombre total d'éléments du tableau.


0 commentaires

2
votes

Si vous voulez vraiment utiliser un conteneur avec une taille fixe, utilisez std :: Array code> pour Moderne C ++ au lieu d'un tableau C:

#include <vector>

std::vector<std::int32_t> scores;

for (std::size_t i{0}; i < scores.size(); ++i) {
  // Do stuff...
}


0 commentaires