0
votes

Je voulais inverser mon tableau. Pourquoi ce code donne la valeur des ordures?

    #include <iostream>


    using namespace std;

    int main(){

    int n;
    int a[n];
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=n;i>=0;i--){
       cout<<a[i]<<" ";
   }
    }

Input:- 4
1 2 3 4
Output 4199008 4 3 2 1 

3 commentaires

Activez des avertissements sur votre compilateur. int A [n]; n'est pas pris en charge par chaque compilateur et devrait générer un avertissement, sinon une erreur. Vous n'initialisez pas n en premier. Vous voulez réellement std :: vecteur . En outre, N'utilisez pas à l'aide de namepace std; . Vous pouvez inverser tout conteneur qui prend en charge l'itération bidirectionnelle à l'aide de std :: inverse () < / code> .


En outre, votre deuxième boucle indexe a [n] , qui est UB. Vous devez commencer par n-1 .


Votre code n'essaie clairement pas de "inverser le tableau". Voir std :: inverse. Après l'application, coutez la matrice résultante, premier à durer. Cela simplifie et documente votre intention de codage et évite le comportement non défini non intentionnel.


4 Réponses :


1
votes

a [n] retournera l'élément après le dernier. Lorsque vous itérez l'ordre inverse, commencez par i = n-1 .


1 commentaires

Il y a plus que doit être corrigé, par exemple Le int A [n] avant n est initialisé. Même l'initialisation, cela ne fonctionnerait pas à moins que n est const .



2
votes

Pour commencer, le programme a un comportement non défini car la variable n code> n'est pas initialisée xxx pré>

donc cette déclaration p> xxx pré>

n'est pas valide. De plus, des tableaux de longueur variable ne sont pas une fonctionnalité C ++ standard. Utilisez plutôt le modèle de classe standard std :: vecteur code>. P>

aussi dans cette boucle p> xxx pré>

Vous essayez d'accéder à élément inexistant avec l'index n code>. p>

Vous n'allez pas inverser un tableau. Vous essayez de sortir un tableau dans l'ordre inverse. P>

Faites attention à cela il existe des algorithmes standard std :: inverse code> et std :: reverse_copy code> Déclaré dans l'en-tête code>. p>

Voici un exemple de la manière dont votre programme avec votre approche pourrait regarder P>

Enter the size of an array 10
Enter 10 elements: 0 1 2 3 4 5 6 7 8 9
The array in the reverse order
9 8 7 6 5 4 3 2 1 0 


1 commentaires

Mention honorable: RBEGIN () et Rend () QUI FAIRE REVERS_COPY complètement inutile.



0
votes

Au début de votre programme, il y a une erreur:

    for(int i=n-1;i>=-1;i--){
       cout<<a[i]<<" ";
   }


0 commentaires

0
votes

Lors de l'annulation de la matrice Démarrer la boucle de N-1 i = N-1 (n est le n ° d'éléments dans la matrice). Et courez la boucle jusqu'à ce que je> = 0. Si vous démarrerez une boucle de N, il lira un indice illégal qui est hors de portée et vous donnera une valeur ordures.

 for(int i=n-1; i>=0; i++){
      cout<<arr[i]<<" ";}


0 commentaires