#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
, и вы никогда не закончите, asa
останется прежним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 ;
}
}