Problema nella scrittura del primo programma con funzioni

di Anonimizzato26966 il
8 risposte
Buonasera a tutti, essendo il mio primo "post" mi presento brevemente. Sono uno studente di matematica che si sta affacciando con un certe interesse alla programmazione. Essendo stato il corso seguito molto poco esaustivo, il mio studio è compiuto prevalentemente da autodidatta. Come manuale utilizzo il testo "King" consigliatomi dal docente. Ho deciso di iscrivermi a questo forum per avere più opinioni e/o correzioni sui programmi da me scritti per esercitarmi.
Attualmente sto scrivendo il mio primo programma con l'implemento di funzioni.
Prima di scrivere il programma vi riporto la traccia dell'esercizio propostomi dal docente.
Simulare un certo numero di mani del gioco CRAPS, alla fine di ogni mano si chieda all'utente se vuole continuare. Quando l'utente decide di smettere si stampa il numero di partite vinte e perse.
Le regole del gioco sono:
-il giocatore lancia due dadi: se il risultato è 7 oppure 11 l'utente vince, se il risultato è 2,3 oppure 11 l'utente perde. In tutti gli altri casi si dice "punto".
-il giocatore lancia i dadi continuamente finché non realizza nuovamente il punto 7. Nel primo caso vince, nel secondo perde.
Il programma da me scritto (che non funziona) è:


int lanciodadi()
{
int n;
n=srand()%11+2;
return n;
}

int manocraps ()
{
int x;
x=lanciodadi();
if (x=7 || x=11)
return 1;
else
{
if (x=2 || x= 3 || x=11)
return 0;
else
while (lanciodadi()=7)
return 1;
}
}

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int vinte;
int perse;
char c;
vinte=0;
perse=0;
srand(time(NULL));
do
{
if(manocraps()==1)
vinte++;
else perse++;
printf("\nvuoi continuare a giocare(S/N)?");
scanf("%c", &c);
}
while (c=='S');
printf("\nhai vinto %d partite e ne hai perse %d", vinte ,perse);
return 0;
}


I problemi scaturiscono dalla funzione manocraps. Il programma mi riporta 3 errori, rispettivamente nei 2 if e nel while. In tutti e 3 i casi riporta la scritta "Expression is not assignable". Il programma poi mi porta anche 3 indicazioni di colore giallo che però destano meno la mia attenzione. Non capisco proprio perché mi dia errore nell'utilizzare gli operatori logici (sempre che l'errore sia quello).
Mi scuso per la lunghezza del mio messaggio (e per eventuali errori grammaticali) e ringrazio in anticipo chiunque vorrà provare ad aiutarmi a capire gli errori da me commessi.
Ps. Uso xcode su mac.

8 Risposte

  • Usa i tag CODE per formattare il codice, altrimenti potrebbero sparire dei pezzi (il software di formattazione dei post considera alcune combinazioni di caratteri come istruzioni di formattazione).
  • Hai usato = al posto di ==
  • Nella funzione
    int lanciodadi()
    {
    int n;
    n=srand()%11+2;
    return n;
    }
    mi sa che devi modificarla così:
    int lanciodadi()
    {
        srand(time(0));	// Inizializza ìl generatore di numeri casuali
        return rand()%11+2;	// Genera un numero casuale
    }
    Gli errori che ti vengono segnalati in manocraps sono dovuti all'uso dell'operatore '=' al posto di '=='. Ad esempio questi:
    if (x=7 || x=11)
    ...
    if (x=2 || x= 3 || x=11)
    ...
    while (lanciodadi()=7)
    ...
    
    sono tutti operatori '==' (uguaglianza). L'operatore '=' è l'operatore di assegnazione.
  • Grazie mille per le correzioni, il programma adesso gira (dopo aver fatto anche un'altra correzione). Però esce dal ciclo while dopo una sola richiesta di 'S/N' anche premendo S. Sapresti dirmi il perché?
    Allego lo screen del codice.
    Ps. cosa sarebbe il tag 'CODE'?
    Grazie ancora
    Allegati:
    26966_f3f697b620a273efd56c14ad31871861.png
    26966_f3f697b620a273efd56c14ad31871861.png
  • Ha abbassato di molto la qualità
  • scanf(" %c", &c);
    }
    while (c=='S' || c=='s');
  • Grazie mille, ora funziona. Ma come mai c'è bisogno dello spazio all'interno della scanf?
  • Per consumare l'eventuale newline che alcuni terminali mandano all'inizio
Devi accedere o registrarti per scrivere nel forum
8 risposte