Dlaczego wywala mi program?

0

Powie mi ktos dlaczego wywala mi ten program

#include <iostream>
 
using namespace std;
int licznik (char kolor[],int i,int a,int &liczba);
int licznikb(char kolor[],int i,int a,int &liczba);
int main()
{
    int liczbaa=0,liczbab=0,liczbac=0;
    int pola=0;
    int liczba=0;
        cin>>pola;
  int p;
  int a,b,c;
  cin>>a>>b>>c;
  char kolor[pola+1];
  for(int i=0;i<pola;i++)
  {
      cin>>kolor[i];
  }
 
 
 
 
 
for(int i=0;i<pola;i++)
{
 
 
 
     if(kolor[i]=='b'||'B')
     {
 
        if(   kolor[i+a]=='b'||'B')
      {
         licznik(kolor,i,a,liczbaa);
      }
         if (   kolor[i+b]=='b'||'B')
      {
          licznik(kolor,i,a,liczbab);
      }
         if (   kolor[i+c]=='b'||'B')
       {
           licznik(kolor,i,a,liczbac);
       }
 
     }
        if(kolor[i]=='c'||'C')
     {
 
        if(   kolor[i+a]=='c'||'C')
      {
          licznikb(kolor,i,a,liczbaa);
      }
         if (   kolor[i+b]=='c'||'C')
      {
          licznikb(kolor,i,a,liczbab);
 
      }
        if (   kolor[i+c]=='c'||'C')
       {
          licznikb(kolor,i,a,liczbac);
 
       }
 
     }
}
 
 
  if(liczbaa>liczbab&&liczbaa>liczbac)
  {
      liczba=liczbaa;
 
  }
  if(liczbab>liczbaa&&liczbab>liczbac)
  {
      liczba=liczbab;
 
  }
  if(liczbac>liczbab&&liczbac>liczbaa)
  {
      liczba=liczbac;
 
  }
cout<<liczba;
    return 0;
}
int licznik(char kolor[],int i,int a,int &liczba)
 
{
   if(kolor[i+a]=='b'||'B')
   {
 
 
             liczba++;
             licznik(kolor, i, a, liczba);
   }
         else     if(kolor[i+a]!='b'||'B')
             return liczba;
 
}
int licznikb(char kolor[],int i,int a,int &liczba)
 
{
   if(kolor[i+a]=='c'||'C')
    {
             liczba++;
             licznikb(kolor, i, a, liczba);
   }
           else  if(kolor[i+a]!='c'||'C')
             return liczba;
}
4

Ciężko powiedzieć co rozumiesz przez wywala bez kroków niezbędnych do reprodukcji problemu. Niemniej jednak mam kilka rad:

if(kolor[i]=='b'||'B')

to jest if(true), chciałeś napisać

if(kolor[i]=='b'||kolor[i] == 'B')

albo jeszcze lepiej

if(tolower(kolor[i]) == 'b')

    cin>>pola;
// ...
    char kolor[pola+1];

To nie jest poprawny C++, C++ nie ma VLA. Użyj std::vector


Całe zadanie przejedź http://format.krzaq.cc/


if(liczbaa>liczbab&&liczbaa>liczbac)

Masz tu trochę spacji, skopiuj sobie: ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​

0
#include <iostream>
#include <vector>
using namespace std;
int licznik(vector<char> &kolor, int i, int a, int &liczba);
int licznikb(vector<char> &kolor, int i, int a, int &liczba);
int main() {
  int liczbaa = 0, liczbab = 0, liczbac = 0;
  int pola = 0;
  int liczba = 0;
  cin >> pola;
  int p;
  int a, b, c;
  cin >> a >> b >> c;

  vector<char> kolor;
  for (int i = 0; i < pola; i++) {
    char kol;
    cin >> kol;
    kolor.push_back(kol);
  }

  for (int i = 0; i < pola; i++) {
    if (kolor[i] == 'b' || kolor[i] == 'B') {
      if (kolor[i + a] == 'b' || kolor[i + a] == 'B') {
        licznik(kolor, i, a, liczbaa);
      }
      if (kolor[i + b] == 'b' || kolor[i + b] == 'B') {
        licznik(kolor, i, a, liczbab);
      }
      if (kolor[i + c] == 'b' || kolor[i + c] == 'B') {
        licznik(kolor, i, a, liczbac);
      }
    }
    if (kolor[i] == 'c' || kolor[i] == 'C') {
      if (kolor[i + a] == 'c' || kolor[i + a] == 'C') {
        licznikb(kolor, i, a, liczbaa);
      }
      if (kolor[i + b] == 'c' || kolor[i + b] == 'C') {
        licznikb(kolor, i, a, liczbab);
      }
      if (kolor[i + c] == 'c' || kolor[i + c] == 'C') {
        licznikb(kolor, i, a, liczbac);
      }
    }
  }

  if ((liczbaa > liczbab) && (liczbaa > liczbac)) {
    liczba = liczbaa;
  }
  if ((liczbab > liczbaa) && (liczbab > liczbac)) {
    liczba = liczbab;
  }
  if ((liczbac > liczbab) && (liczbac > liczbaa)) {
    liczba = liczbac;
  }
  cout << liczba;
  return 0;
}
int licznik(vector<char> &kolor, int i, int a, int &liczba)

{
  if (kolor[i] == 'b' || kolor[i] == 'B') {
    liczba++;
    licznik(kolor, i, a, liczba);
  } else if (kolor[i + a] != ('b') || ('B'))
    return liczba;
}
int licznikb(vector<char> &kolor, int i, int a, int &liczba)

{
  if (kolor[i + a] == 'c' || kolor[i + a] == 'C') {
    liczba++;
    licznikb(kolor, i, a, liczba);
  } else if (kolor[i + a] != 'c' || kolor[i + a] != 'C')
    return liczba;
}

zmiennilem na to. Wpisuje liczby jest dobrze wpisuje te litery tez dobrze,Gdy wpisze juz wszystko program mi wywala

0

Szklana kula już wzięła wolne na święta. Co to jest "wszystko", które wpisujesz żeby program się "wywalił"?

https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/

1
kuba rossa napisał(a):
      if (kolor[i + a] == 'b' || kolor[i + a] == 'B') {
      if (kolor[i + b] == 'b' || kolor[i + b] == 'B') {
      if (kolor[i + c] == 'b' || kolor[i + c] == 'B') {

Wychodzisz poza zakres tablicy. I na Boga, nazywaj te zmienne po ludzku a nie jakieś liczbaa czy xyz

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.