Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C] Errore che non mi spiego

    Salve, da poco sto studiando il linguaggio di programmazione C.
    Mi sono divertito a scrivere dei programmini e vorrei porvi in osservazioneuno di questi che simula il controllo della vincita al superenalotto.

    codice:
    #include <stdio.h> 
     int main() {  	
    /* ComboVincente[6] contiene la combinazione vincente; Jolly e Star sono i rispettivi numeri della combinazione vincente; Giocata[6] e StarGiocata sono i numeri dell'utente; i, g, c, d sonousati come contatori;  CombEsatte contiene il numero di combinazioni che l'utente ha indovinato */ 
    int ComboVincente[6], Jolly, Star, Giocata[6], StarGiocata=0, i, d, CombEsatte=0;  	
    /* SNstar è un controllo utilizzato per capire se l'utente ha giocato o meno il numero SuperStar; Exit viene utilizzato per capire se l'utente vuole uscire dal programma */ 	
    char SNstar, Exit; 	 	
    printf("\nQuesto programma effettua il conteggio delle combinazioni del SuperEnalotto. BUONA FORTUNA!!\n"); 	
    printf("Inserimento combinazione vincente:\n"); 	
    for (i=0; i<6; i++)		/* acquisisco i numeri della giocata vincente */ 	
    { 		
    printf("%d° numero - ", i+1); 
    scanf("%d", &ComboVincente[i]); 	} 	
    printf("Numero Jolly - ");	
    scanf("%d", &Jolly); 	
    printf("Numero SuperStar - "); 
    scanf("%d", &Star); 	
    do { 
    printf("\nInserimento giocata effettuata:\n"); 		
    for (i=0; i<6; i++)		/*Carico il vettore con i numeri giocati*/ 		
    { 
    printf("%d° numero - ", i+1); scanf("%d", &Giocata[i]); 		
    }	
    printf("Hai un numero SuperStar? S/N - "); 
    scanf("%s", &SNstar);   /* controllo se l'utente ha giocato il SuperStar */ 	
    if (SNstar == 'S' || SNstar == 's') 		
    { 		
    printf("Inserisci il tuo numero SuperStar - ");
    scanf("%d", &StarGiocata);    /* acquisisco il numero */ 			
    if (Star == StarGiocata)		/* controllo se il numero dell'utente è uguale a quello della combinazione vincente */ 		
    printf("\nIl Numero SusperStar %d è PRESENTE nella tua giocata!\n\n", Star); 			
    else printf("\nIl numero SuperStar %d NON è presente nella sua giocata.	n\n", Star); 		} 		 		
    for (i=0; i<6; i++)			/* i = contatore della combinazione vincente */ 			
    for (d=0; d<6; d++)		/* d = contatore della giocata effettuata */ 				
    if (ComboVincente[i] == Giocata[d]) { 						
    CombEsatte++; 						
    printf("Il numero %d della combinazione vincente è PRESENTE nella giocata effettuata!\n", Giocata[d]);				 					
    } 		
    if (CombEsatte == 5) 	{ 			
    for (i=0; i<6; i++) 				
    if (Giocata[i] == Jolly) { 					
    printf("FANTASTICO!! hai totalizzato un 5+1, il numero Jolly %d è presente nella tua giocata!!\n\n", Jolly); 					
    break; 	
    }  				
    if (i==6) 					
    printf("OTTIMO! ha totalizzato un %d!\n\n", CombEsatte); 			 		
    } else  { 			
    if (CombEsatte < 3) 				
    printf("\nHai %d numeri della combinazione vincente.\n", CombEsatte); 			
    else 				
    printf("\nOTTIMO! hai totalizzato un %d!\n", CombEsatte); 		
    }	 		
    CombEsatte = 0; 		
    StarGiocata = 0; 		
    printf("\nHai un'altra giocata da controllare? S/N : ");
    scanf("%s", &Exit);  /* controllo se l'utente vuole uscire dal programma */ 	
    } while ((Exit == 'S') || (Exit == 's')); 	
    printf("\n******** PROGRAMMA TERMINATO ********\n\n"); 	
    return 0; 
    }
    Ve lo faccio vedere siccome ho un errore, l'errore di Segmentation fault che proprio non riesco a spiegarmi.
    Vi ringrazio se mi date una soluzione...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se dichiari delle variabili come char non puoi usare la scanf con %s ma devi usare %c
    E inoltre, devi ripulire il buffer di input. Le linee da aggiungere/modificare sono

    codice:
    while(!getchar());
    scanf("%c", &SNstar);
    e

    codice:
    while(!getchar());
    scanf("%c", &Exit);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    Se dichiari delle variabili come char non puoi usare la scanf con %s ma devi usare %c
    E inoltre, devi ripulire il buffer di input. Le linee da aggiungere/modificare sono

    codice:
    while(!getchar());
    scanf("%c", &SNstar);
    e

    codice:
    while(!getchar());
    scanf("%c", &Exit);
    non conosco questa funzione..

    fammi capire una cosa.. se io dichiaro una variabile char X in cui faccio scanf("%s", &X); siccome devo acquisire per esempio un nome.. non va bene?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da gio_gio88
    non conosco questa funzione..
    Se parli della getchar, e' una semplicissima funzione della libreria standard, una delle prime che si studia ...

    fammi capire una cosa.. se io dichiaro una variabile char X in cui faccio scanf("%s", &X); siccome devo acquisire per esempio un nome.. non va bene?
    No che non va bene.

    Un nome e' fatto da tanti caratteri ma char X e' un solo carattere.

    Per il nome, devi usare un array di caratteri, esempio

    char nome[30];

    e allora puoi scrivere

    scanf("%s", nome)

    (nota ... senza & perche' nome e' gia' un puntatore).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da oregon
    Se parli della getchar, e' una semplicissima funzione della libreria standard, una delle prime che si studia ...



    No che non va bene.

    Un nome e' fatto da tanti caratteri ma char X e' un solo carattere.

    Per il nome, devi usare un array di caratteri, esempio

    char nome[30];

    e allora puoi scrivere

    scanf("%s", nome)

    (nota ... senza & perche' nome e' gia' un puntatore).
    si.. conosco il metodo dell'array.. però.. %s quindi viene usata solo per array? se s sta per stringhe.. char X non è una variabile che può contenere anche una parola come ad esempio "cane"??


  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da gio_gio88
    char X non è una variabile che può contenere anche una parola come ad esempio "cane"??
    Assolutamente no ...

    char X

    e' una variabile che contiene un solo carattere.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Originariamente inviato da oregon
    Assolutamente no ...

    char X

    e' una variabile che contiene un solo carattere.
    e per avere una variabile che contiene una parola come "cane" cosa si deve fare?
    creare un array e poi un ciclo for per stamparlo?!!? VVoVe:

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Per una stringa, come ti ho detto, devi dichiarare un array di caratteri. Ti ripeto

    char nome[30];

    Per inserire la stringa nell'array, usi la scanf

    scanf("%s", nome);

    Per visualizzare, la printf

    printf("%s", nome);

    Se stai studiando il C, queste sono nozioni e funzioni di base, che puoi studiare nelle prime pagine di un libro ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Originariamente inviato da oregon
    Per una stringa, come ti ho detto, devi dichiarare un array di caratteri. Ti ripeto

    char nome[30];

    Per inserire la stringa nell'array, usi la scanf

    scanf("%s", nome);

    Per visualizzare, la printf

    printf("%s", nome);
    a ok, quindi cosi facendo legge fino al terminatore "/0", ok..

    quindi nel programmino sopra se cambio %s in %c nella scanf dovrebbe andare..

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da gio_gio88
    quindi nel programmino sopra se cambio %s in %c nella scanf dovrebbe andare..
    Sì, ma come ti avevo scritto nella prima risposta, devi anche svuotare il buffer di input da precedenti "enter" che verrebbero scambiati per una risposta alle domande di conferma. E per farlo devi usare il ciclo while con la getchar.

    Vedi la mia prima risposta.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.