0
votes

le programme est bloqué lors de la sortie

Je ne sais pas pourquoi le programme n'a pas réussi à donner la sortie, c'est le code pour trouver le nombre de zéro dans un tableau donné

     #include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int arr[n];
    for(int i=0; i<n; i++)
    {
        cin>>arr[i];
    }
    int b=0 , a;
    for(int j=0; j<n; j++)
    {
        a=arr[j];
        while(a==0)
        {
            b=b++;
        }
        
    }
    cout<<b;
}


3 commentaires

Dès que a == 0 vous commencez à incrémenter b et vous ne finirez jamais car a reste le même 0 . Au fait, c'est une bonne occasion d'apprendre à travailler avec un débogueur


Au-delà, b=b++; est un comportement indéfini. Si vous voulez simplement incrémenter b , c'est simplement b++; .


Notez que C ++ n'a pas vraiment de tableaux de longueur variable . Utilisez plutôt std::vector .


3 Réponses :


0
votes

Essayez de le changer en

if (a==0) //you had a while here
{
  b=b++;
}

Puisque vous ne changez pas la valeur de 'a' à l'intérieur de la boucle, il reste coincé à l'intérieur du while et cela conduit à une boucle infinie!


6 commentaires

Faire. Ou pas. Il n'y a pas d'essai.


Remarque à l'intention du demandeur: vous avez encore besoin d'un while . Il a juste besoin d'une condition de sortie différente. La réponse ci-dessus doit aller dans le while


@ user4581301 Je ne vois aucun besoin d'une boucle while? Changer pour si semble donner le comportement souhaité?


On dirait que vous avez mélangé b++ et b = b + 1


@AlanBirtles en quelque sorte, j'ai complètement raté la boucle for emballage for .


mais dans les geeks pour les geeks, il montre une erreur de compilation {prog.cpp: 9: 1: erreur: un ID non qualifié attendu avant {jeton} le résultat est parfait sur mon pc



0
votes
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int arr[n];
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    int b = 0, a = 0;
    for (int j = 0; j < n; j++)
    {
        a = arr[j];
        if (a == 0) //here you used while use if as you are checking the condition every iteration of loop.
        {
            b++; //here instead of using b=b++ use this.
        }
    }
    cout << b;
    return 0; //return is optional.
}

1 commentaires

mais dans les geeks pour les geeks, il montre une erreur de compilation {prog.cpp: 9: 1: erreur: un ID non qualifié attendu avant {jeton} le résultat est parfait sur mon pc



0
votes

faites-le simplement dans la boucle j for. vous n'avez pas besoin d' a variable ou quoi que ce soit

et aussi les tableaux de variables d'exécution ne sont pas autorisés en C ++ utiliser des tableaux ou des vectors dynamiques

for(int j=0; j<n; j++)
    {
        if(arr[j]==0){
            b++;
        }
        
    }


0 commentaires