-8
votes

Ajouter des chiffres 100-299 à un tableau

J'essaie de créer un éventail de 200 entiers, rempli d'entiers 100-299. J'ai actuellement ceci: xxx

lorsque j'affiche myarray [0] et myARRAY [200] , 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 S de 0-99, et cela fonctionne comme prévu.


5 commentaires

Vous n'écrivez jamais à myarray [0] , 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; au lieu de myarray [J] = j; .


Etant donné que j peut être aussi élevé que 299, que pensez-vous que vous arriverez lorsque vous attribuez quelque chose à myarray [299] , é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. - 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) ? MYARRAY [-100] 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.


6 Réponses :


2
votes

Votre premier index de tableau commence à 100 pas de 0. int myarray [200] signifie index de 0 à 199.


0 commentaires

3
votes
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;

}

0 commentaires

6
votes

depuis j de 100-299, myarray [j] ne remplit jamais les éléments 0-99 de myARRAY , et sort de limites pour la dernière moitié de la boucle.

vous voulez: xxx


0 commentaires

3
votes

Les autres réponses démontrent déjà votre erreur, mais je souhaite montrer une approche alternative à l'aide de std :: iota : xxx


0 commentaires

2
votes

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.

tel que < a href = "https://fr.cppreference.com/w/cpp/algorithm/generate" rel = "nfollow noreferrer"> std ::: générer () ou std :: generate_n () : xxx

ou, si vous utilisez c ++ 11 ou ultérieure: xxx

ou, en utilisant std :: itoa () à la place: xxx


0 commentaires

0
votes

Pour remplir un tableau brut avec une SEQENCE de chiffres, le std :: iota (à partir de ) à l'aide de std :: commence et std :: end (à partir de ) vient à la revue.

en utilisant ... est Utilisé de la même manière que nous appliquons std :: échange , donc s'il existe un meilleur Begin / End 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 ou std :: gray Vous n'aurez pas à modifier le code beaucoup ou du tout. xxx


1 commentaires

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