J'essaie de créer un éventail de 200 entiers, rempli d'entiers 100-299. J'ai actuellement ceci: lorsque j'affiche myarray [0] code> et
myARRAY [200] code>, il affiche des numéros de déchets aléatoires, donc Je sais que mon tableau ne remplit pas correctement. J'ai aussi un autre tableau rempli de
int code> S de 0-99, et cela fonctionne comme prévu. P> p>
6 Réponses :
Votre premier index de tableau commence à 100 pas de 0. int myarray [200] signifie index de 0 à 199. P>
int myArray[200]; int j; //when you say arr[j] with j = 200 for example and you array goes from 0 to 199 of course you will get an error for(j = 100; j < 300; j++){ // you are confusing between index of the array you are trying to access & the the value to assign it //with j-100 now it will go from 100-100=0 to 299-100=199 myArray[j-100] = j; }
depuis vous voulez: p> j code> de 100-299,
myarray [j] code> ne remplit jamais les éléments 0-99 de
myARRAY code>, et sort de limites pour la dernière moitié de la boucle.
Les autres réponses démontrent déjà votre erreur, mais je souhaite montrer une approche alternative à l'aide de std :: iota code>
:
Comme d'autres ont déclaré, votre boucle utilise les fausses index de la matrice. Les matrices commencent toujours à l'index 0, quelles que soient les valeurs stockées dans la matrice.
Vous pouvez utiliser des algorithmes standard pour éviter d'utiliser une boucle manuelle, évitant ainsi de tels pièges. P>
tel que < a href = "https://fr.cppreference.com/w/cpp/algorithm/generate" rel = "nfollow noreferrer"> p> ou, si vous utilisez c ++ 11 ou ultérieure: p> ou, en utilisant std ::: générer () code> ou
std :: generate_n () code>
: p> std :: itoa () code> à la place: P>
Pour remplir un tableau brut avec une SEQENCE de chiffres, le std :: iota code> (à partir de
std :: commence code> et
std :: end code> (à partir de
en utilisant ... code> est Utilisé de la même manière que nous appliquons
std :: échange code>, donc s'il existe un meilleur
Begin / End Code> Méthodes Spéciales disponibles La version correcte pour les conteneurs est cueillie. Donc, si vous décidez que votre conteneur doit être un
std :: vecteur code> ou
std :: gray code> Vous n'aurez pas à modifier le code beaucoup ou du tout. P>
Cette réponse est arrivée dans des poteaux de basse qualité à ... Pouvez-vous ajouter un commentaire à votre réponse? Expliquez votre logique et donnez un peu de commentaire sur ce que votre code est destiné à faire. Cela aidera l'OP, mais cela servira également de commentaire pour les futurs utilisateurs
Vous n'écrivez jamais à
myarray [0] code>, vous ne devriez donc pas vous attendre à ce qu'il contienne une valeur significative
Vous êtes itérant sur les éléments à l'index 100 à 299, mais les indices valides de votre réseau sont compris entre 0 et 199. Vous avez probablement signifié
myarray [J-100] = j; code> au lieu de
myarray [J] = j; code>.
Etant donné que
j code> peut être aussi élevé que 299, que pensez-vous que vous arriverez lorsque vous attribuez quelque chose à
myarray [299] code>, étant donné que la matrice n'a que 200 éléments?
J'ai aussi un autre tableau rempli d'INT de 0 à 99, et cela fonctionne comme prévu. I> - C'est parce que vous étiez la chance que vous avez commencé à 0. Vous n'avez jamais compris que le code ne fonctionnait pas si Vous avez commencé à un numéro différent. Comment votre code aurait-il travaillé si vous avez commencé à -100 et est allé à 100
pour (int j = -100; j <= 100; ++ j) code>?
MYARRAY [-100] CODE> a-t-il un sens pour vous?
Parfois, il vous suffit de regarder dur au code que vous avez écrit et de vous demander ce que cela fait en réalité au lieu de ce que vous pensez que cela fait.