программа застряла при выдаче выходных данных

#c #arrays #output #arr

#c #массивы #вывод #arr

Вопрос:

Я не знаю, почему программе не удается выдать выходные данные, это код для поиска количества нулей в заданном массиве

      #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;
}
  

Комментарии:

1. Как только a == 0 вы начнете увеличивать b , и вы никогда не закончите, as a останется прежним 0 . Кстати, это хорошая возможность научиться работать с отладчиком

2. Помимо этого, b=b ; поведение не определено. Если вы просто хотите увеличить b , это просто b ; .

3. Обратите внимание, что C на самом деле не имеет массивов переменной длины . Используйте std::vector вместо этого.

Ответ №1:

Попробуйте изменить его на

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

Поскольку вы не меняете значение ‘a’ внутри цикла, оно застревает внутри while, и это приводит к бесконечному циклу!

Комментарии:

1. Делать. Или не делать. Попытки нет.

2. Примечание для спрашивающего: вам все еще нужен while . Ему просто нужно другое условие выхода. Приведенный выше ответ должен быть включен в while

3. @user4581301 я не вижу необходимости в цикле while? Изменение на if, по-видимому, дает желаемое поведение?

4. Похоже, вы перепутали b и b = b 1

5. @AlanBirtles каким-то образом я полностью пропустил цикл переноса for .

Ответ №2:

 #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. но в geeks для geeks отображается ошибка компиляции {prog.cpp:9:1: ошибка: ожидаемый неквалифицированный идентификатор перед {token} результат на моем ПК получается идеальным

Ответ №3:

просто сделайте это в цикле j for . вам не нужна никакая a переменная или что-то еще

а также массивы переменных времени выполнения не разрешены в C используйте динамические массивы или vectors

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