Uczę się C++ i piszę program dealera kart. Kiedy kompiluję kod i otrzymuję te błędy:

dealer3.cpp:12: error: expected initializer before ‘int’
dealer3.cpp:33: error: expected constructor, destructor, or type conversion before ‘=’ token
dealer3.cpp:34: error: expected constructor, destructor, or type conversion before ‘=’ token
dealer3.cpp:35: error: expected constructor, destructor, or type conversion before ‘=’ token
dealer3.cpp:36: error: expected constructor, destructor, or type conversion before ‘=’ token
dealer3.cpp:37: error: expected constructor, destructor, or type conversion before ‘<<’ token
dealer3.cpp:38: error: expected declaration before ‘}’ token

A oto mój kod

#include<iostream>
#include<time.h>
#include<stdlib.h>
#include<cmath>

using namespace std;

int randn(int n);
void draw();
int uni(int n);
char *suits[4]={"Hearts","Diamonds","spades","clubs"};
char *ranks[13]={"ace","two","three","four","five","six","seven","eight","nine","ten","jack","queen","king"};
int drawn[52];
int remaining=52;
int main() {
    int n;
    int i;
    srand(time(NULL));
    while(1) {
       cout<<"enter number of cards to draw"<<endl;
       cin>>n;
       if (n==0) break;

for (i=1; i<=n; i++)
    draw();
}

    return 0;
}
int r;
int s;
int n;
int card;
n=randn(remaining--);
card=uni(n);
    r=card%13;
    s=card/13;
    cout<<ranks[r]<<" of "<<suit[s]<<endl;
}
int uni(int n)
{
int i=0;
while (drawn[i])
    i++;
while (n-->0){
    i++;
while (drawn[i])
    i++;
}
card_drawn([i])=true;
return i;
}
int randn (int n){
return rand()%n;
}

Dlaczego to?

c++
-2
Nick Krichevsky 14 sierpień 2011, 01:47
Więc jakie jest twoje pytanie? Czy przeczytałeś komunikaty o błędach?
 – 
Frédéric Hamidi
14 sierpień 2011, 01:49
Tak przeczytałem błędy ale nie rozumiem co robić
 – 
Nick Krichevsky
14 sierpień 2011, 01:50
2
Zacznij od prawidłowego wcięcia kodu, proszę?
 – 
jweyrich
14 sierpień 2011, 01:51
Masz niedopasowany prawy nawias klamrowy w wierszu 38. i kod poza jakąkolwiek funkcją (np. wywołanie randn() w wierszu 33.). Całkowicie brakuje funkcji draw(), co może wyjaśniać cały ten kod w bloku zero. Czy chodziło Ci o to, że cały ten kod zaczynający się w linii 29 jest funkcją draw()?
 – 
Carey Gregory
14 sierpień 2011, 02:12

2 odpowiedzi

Najlepsza odpowiedź

Właściwie jest to fajny przypadek, w którym wcięcie kodu rozwiązałoby problem (lub uczyniłoby rozwiązanie bardzo oczywistym), ponieważ spowodowałoby to wyświetlenie kilku błędów w nawiasach klamrowych. Masz kilka wierszy kodu, które znajdują się poza jakąkolwiek funkcją, która tam nie należy.

Kilka wskazówek dotyczących formatowania dla Ciebie:

  • Wcięcie każdego zagnieżdżonego bloku kodu o stałą liczbę spacji (zwykle 4).
  • Pozostaw pustą linię po każdej funkcji.
  • Otwierając nowy blok dla funkcji lub instrukcji for-, while- lub if-(lista jest długa), pamiętaj, aby konsekwentnie umieszczać nawiasy otwierające (tak samo styl w całym kodzie).
  • upewnij się, że nawias zamykający blok jest na tym samym poziomie wcięcia, co instrukcja/nawias, który go otworzył.

Zauważ, że większość IDE ma opcję automatycznego naprawiania formatowania (zwłaszcza wcięcia).

6
Braiam 5 kwiecień 2015, 22:59
2
I za jednym zamachem deklaruje dobro jednego stylu w nawiasach, a nie dobro drugiego. Czy masz pojęcie, jak długo trwa ta kłótnia i jak całkowicie nierozwiązana jest i pozostanie na zawsze? ;-)
 – 
Carey Gregory
14 sierpień 2011, 02:15
Carey dostał tutaj pierwszy plus nie mogę oznaczyć komentarza jako poprawnej odpowiedzi
 – 
Nick Krichevsky
14 sierpień 2011, 02:20
1
@Nick: Nie kwestionuję jego odpowiedzi; jego odpowiedź jest prawidłowa. Po prostu naśmiewam się z tego, że deklaruje, że jeden styl wcięcia jest „dobry”, a inny „niedobry”. To pytanie toczyło się od dziesięcioleci i zapewniam, że nie ma uzgodnionej odpowiedzi.
 – 
Carey Gregory
14 sierpień 2011, 02:32
@Carey: Zgoda. Zdecydowanie wolę kręcone pod if, while itd. i nie mam pojęcia, jak to się ma do błędu. Do każdego własnego, więc nie ma „dobra” lub „niedobra”.
 – 
Rudy Velthuis
14 sierpień 2011, 03:16
1
Ok, zmieniłem tę część na zalecenie dotyczące spójności.
 – 
Björn Pollex
14 sierpień 2011, 12:32

Masz brakującą klamrę. A następujące stwierdzenie (s) trafia do globalnej przestrzeni:

n=randn(remaining--);
// ...
1
Mahesh 14 sierpień 2011, 01:55