|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 406
|
[C]Errore su un programma per distribuire le carte
Salve a tutti, ho un problema con questo programma:
Codice:
//Distributore di carte per il gioco del poker
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void mescolaCarte(int [][13]);//Non è necessario specificare il numero di righe
void distribuisciCarte(const int[][13], const char *[], const char *[]);
//le variabili di tipo const non sono modificalbili
main()
{
char *seme[4] = {"Cuori", "Quadri", "Fiori", "Picche"};
char *valore[13] = {"Asso", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette",
"Otto", "Nove", "Dieci", "Fante", "Regina", "Re"};
int mazzo[4][13] = {0};
srand(time(NULL));
mescolaCarte(mazzo);
distribuisciCarte(mazzo, valore, seme);
system("pause");
return 0;
}
void mescolaCarte(int deck[][13])
{
int carta, riga, colonna;
for (carta = 1 ; carta <= 52 ; carta++) {
riga = rand() % 4; //= 0, 1, 2, 3.
colonna = rand() % 13;
while (deck[riga][colonna] != 0) {
riga = rand() % 4; //= 0, 1, 2, 3.
colonna = rand() % 13;
}
deck[riga][colonna] = carta;
}
}
void distribuisciCarte(const int deck[][13], const char *face[], const char *suit[])
{
int carta, riga, colonna;
for (carta = 1 ; carta <= 52 ; carta++)
for (riga = 1 ; riga <= 52 ; riga++)
for (colonna = 1 ; colonna <= 52 ; colonna++)
if (deck[riga][colonna] == carta)
printf ("%5s di %-8s%c", face[colonna], suit[riga], carta % 2 == 0 ? '\n' : '\t');
}
" passing `char **' as argument 2 of `distribuisciCarte(const int (*)[13], const char **, const char **)' adds cv-quals without intervening `const' ". Di che si tratta? Ho provato ad eliminare il "const" dappertutto ed effettivamente il programma parte, ma funziona male (il seme funziona ma il valore è sballato, ottengo cose tipo "NULL" o caratteri a caso). |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2006
Città: Mantova
Messaggi: 468
|
il
void distribuisciCarte(const int[][13], const char *[], const char *[]); const char*[] di fatto è una matrice e se non gli passi una larghezza il compilatore non ha modo di sapere quanto è larga |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Passi come const valori che, di fatto, non sono const (non li hai definiti così).
Trovi qui una spiegazione del perché non è una buona pratica: http://gcc.gnu.org/ml/gcc/1998-02/msg00067.html ciao
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 406
|
Quote:
L'esempio in questione è copiato dal libro, ho (abbiamo) controllato tutto e non ci sono errori di copiatura, la cosa è molto strana. Quote:
Ho provato ad aggiungere const nella dichiarazione delle variabili, che presumo fosse questo il problema. Ma ora il programma fa un ciclo correttamente (neanche sempre) e poi mi fa un errore fatale. Ripeto che è una cosa copiata dal libro senza cambiare nulla. |
||
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Con la correzione fatta, che errore ti genera?
E tanto per curiosità, di che libro si tratta?
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 406
|
Errore nessuno, solo il malfunzionamento del programma. Ottengo cose tipo (sono 3 esecuzioni distinte del programma):
1) <null> di Cuori 2) (schermata nera) 3) Sette di quadri, <null> di Fiori, Tutte finiscono con il classico errore di windows XP: "Si è verificato un errore ecc. ecc." Il libro è "C, corso completo di programmazione" di Deitel&Deitel. |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 406
|
Quote:
Comincia a funzionare, c'è ancora qualcosa che non va con la tabulazione ma il più è fatto. EDIT Andato, gli errori erano in: for (riga = 1 ; riga <= 52 ; riga++) for (colonna = 1 ; colonna <= 52 ; colonna++) I due cicli for vanno eseguiti rispettivamente tra 0 e 3 e tra 0 e 12. Non c'è più niente da dire su questo esercizio, ringrazio tutti! Ultima modifica di Composition86 : 29-08-2008 alle 11:41. |
|
|
|
|
|
|
#9 |
|
Junior Member
Iscritto dal: Jun 2008
Città: Brindisi
Messaggi: 20
|
Perchè 52 righe e colonne???
Se nel main al posto della funzione incriminata, metti un banale: Codice:
for(int i = 0; i < 4; i++){
for(int j=0; j < 13; j++)
printf("%d\n", mazzo[i][j]);
}
Possibile che Deitel Senior e Jr. abbiano messo codice non funzionante? Dite che quando il mio prof sparò a lezione la frase:"In fondo Deitel&Deitel... non sanno programmare! (a proposito dell'allocazione dinamica, ndr)" aveva ragione?
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 406
|
Si adesso ho risolto, un po' di errori li ho fatti io, ma effettivamente il libro ha omesso "const" nelle dichiarazioni delle variabili "char", cosa che causa l'errore che ho scritto nel primo post.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:09.




















