Kompilator: Brakuje mu nawiasu klamrowego chociaż jest dobrze?

0

Mój problem polega na tym , że brakuje mu gdzieś { lub }. Ponieważ mi ciągnie z następnej funkcji.

if(((noc[1][1]=1)&&(noc[1][2]=1))&&(noc[1][3]=1)) {if(wybor==1) gracz+=1; else komputer+=1; if(kto==1){ruch=3; kto=2;} else{ruch=2; kto=1;} cleardevice(); z=1; goto C;}

Tak to mam w oryginale. Oprócz wizualnych i czytelności programu nie wpływa to na pracę programu?
Poniżej w bardziej czytelnym dla ludzkiego oka wyglądzie.

if(((noc[1][1]=1)&&(noc[1][2]=1))&&(noc[1][3]=1))
{
 if(wybor==1) gracz+=1; 
 else komputer+=1;
 if(kto==1)
 {
  ruch=3; 
  kto=2;
 }
 else
 { 
  ruch=2; 
  kto=1;
 } 
 cleardevice(); 
 z=1; 
 goto C;
}

Programuje w C++.

0

bo masz tam instrukcję skoku?

0

Instrukcje skoku kończy się nawiasem klamrowym? Jak mam rozumieć twoją wypowiedź.

0

a co znaczy że "ciągnie ci z następnej funkcji"?

jakbyś formatował normalnie kod to byś nie miał takich problemów
IDE którego operujesz nie ma funkcji automatycznego porobienia wcięć?

w każdym razie jeśli brakuje klamerki to nie w tym fragmencie

btw zdajesz sobie sprawę że tu:

if(((noc[1][1]=1)&&(noc[1][2]=1))&&(noc[1][3]=1))

masz przypisania a nie porównania? czyli za każdym razem warunek się spełni a dodatkowo wypełni trzy pola macierzy?

0

@luke18dg wcale nie programujesz w C++. To co tu pokazałeś to koszmar którego powinieneś się wstydzić. Skasuj to czym prędzej i zacznij się uczyć tego języka. Lekcja na dziś: nie stosujemy goto tylko normalne pętle (inaczej zgubisz się już po kilku linijkach), nie sterujemy przepływem programu za pomocą zmiennych globalnych (!).
Ja rozumiem że musiałbyś doczytać w kursie C++ drugą stronę kursu żeby poznać funkcje i pętle, a to jest dużo czytania ale może sobie poradzisz...

1

if(((noc[1][1]=1)&&(noc[1][2]=1))&&(noc[1][3]=1))

co to ma robic? Przypisuje do każdego 1 i sprawdza czy żaden !=0??

Jest pewna różnica pomiędzy =(operator przypisania) a ==(op. porównania)

0
if(((noc[1][1]==1)&&(noc[1][2]==1))&&(noc[1][3]==1))
 {
  if(wybor==1) gracz+=1;
  else komputer+=1; 
  if(kto==1)
  {
   ruch=3;
   kto=2;
  }
  else
  {
   ruch=2;
   kto=1;
  }
  cleardevice();
  z=1;
  goto C;
 }
 

I na koniec funkcji wywala błąd: "Statement is required here in function czywin()" Oprócz tego, że używam GOTO. I wiem, że jest to niezalecane robić ale nie mam pomysłu jak ominąć 15 linijek kodu oprócz GOTO, więc wybaczcie. Myślałem nad case ale i tak nie wiem jak zrobić w casie warunek ((((noc[1][1]==1)&&(noc[1][2]==1))&&(noc[1][3]==1))). I co wg dać do switcha(?)

Wiem, czym się różni operator przypisania a porównania, mały błąd, który z powodu późnej godz, nie wychwyciłem.

@Shalom Wiem, że nie stosuje się zmiennych globalnych, też wiem, że nie stosuje GOTO, ale nie miałem pomysłu ominąć 15 warunków oprócz GOTO. I wiem o tym doskonale, że się wcześniej czy później zgubie. Próbuje unikać GOTO, ale w tym wypadku nie miałem pomysłu.

1

15 zagnieżdżonych warunków? Ty nie potrzebujesz GOTO. Ty potrzebujesz nowego kodu. Serio, przemyśl i napisz to inaczej.

0

Moim skromnym zdaniem:

  if(wybor==1) gracz+=1; //- ten średnik zawala sprawę?
  else komputer+=1;
0
zibicoder napisał(a):

Moim skromnym zdaniem:

  if(wybor==1) gracz+=1; //- ten średnik zawala sprawę?
  else komputer+=1;

Tak często, miałem problemy z średnikami. Przyzwyczajenia z Pascala :). Problem tkwił w GOTO. Nie mam racjonalnego wytłumaczenia na to ale zwyczajnie po zastosowaniu mniej ergonomicznego kodu bez GOTO, problem zniknął.

1 użytkowników online, w tym zalogowanych: 0, gości: 1