Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - inizializzare le variabili di programma
Forum - C/C++ - inizializzare le variabili di programma

Avatar
pila ricaricabile (Normal User)
Newbie


Messaggi: 13
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 17:44
Lunedì, 03/02/2014
sto scrivendo un prototipo di programma, lo faccio partire e non mi segna nessun errore, si apre la finestra console, scelgo la modalità tiro al Bersaglio gioco la partita e ritorno al mio menu, scelgo nuovamente la modalità 2  e mi va in crash tutto.
Siccome il compilatore (Visual studio 2013 professional ) non mi dà nessun errore ma solo un warning, credo che l'errore sia nel fatto che la variabile segreta sia piena anche se lo dubito in quanto nella modalità multi giocatore non succede nulla di anomalo.
posto di seguito il codice (Attenzione è un prototipo):
Codice sorgente - presumibilmente C++

  1. #include "stdafx.h"
  2.  
  3. int main(void) {
  4.         int car1 = 133;
  5.         int comando;
  6.         char segreta[20], l, vispar[40];
  7.         char patch[20][20];
  8.         int i, k, giusto, ncarat, nerr = 0, nind = 0;
  9.         int gamemode, level, e, vittorie = 0, sconfitte = 0;
  10.  
  11.         printf("Benvenuto in questo gioco:\n"
  12.                 "premi invio per continuare...\n");
  13.         getchar();
  14.         do {
  15.                 system("CLS");
  16.                 printf("              !!MENU!!                \n");
  17.                 printf("Modalit%c multigiocatore            <1>\n", car1);
  18.                 printf("Modalit%c tiro al bersaglio         <2>\n", car1);
  19.                 printf("Gioca la partita con un amico      <1>\n");
  20.                 printf("Gioca i livelli                    <1>\n");
  21.                 printf("Vai al negozio                     <3>\n");
  22.                 printf("");
  23.                 scanf("%d", &comando);
  24.                 getchar();
  25.                 switch (comando)
  26.                 {
  27.                 case 1:
  28.                         system("CLS");
  29.                         printf("Giocatore 1!!!\n");
  30.                         printf("Inserisci la parola segreta (e conferma premendo invio):\n");
  31.                         gets(segreta);
  32.                         ncarat = strlen(segreta);
  33.                         for (i = 0; i <= ncarat; i++) {
  34.                                 if (i < ncarat) {
  35.                                         vispar[i] = '-';
  36.                                 }
  37.                                 else {
  38.                                         vispar[i] = '\0';
  39.                                 }
  40.                         }
  41.                         system("CLS");
  42.                         for (k = 0; nerr != 10 && nind < ncarat; k++) {
  43.                                 printf("Digita la lettera: ");
  44.                                 scanf("%c", &l);
  45.                                 giusto = 0;
  46.                                 for (i = 0; segreta[i] != '\0'; i++) {
  47.                                         if (segreta[i] == l) {
  48.                                                 vispar[i] = l;
  49.                                                 giusto = 1;
  50.                                                 nind++;
  51.                                         }
  52.                                 }
  53.                                 printf("%s\n", vispar);
  54.                                 if (giusto == 0) {
  55.                                         nerr++;
  56.                                 }
  57.                                 printf("numero errori %d\n", nerr);
  58.                                 getchar();
  59.                         }
  60.                         if (nerr == 10) {
  61.                                 system("CLS");
  62.                                 printf("Hai perso!!!!");
  63.                                 printf("\n\nla parola era: %s", segreta);
  64.                                 sconfitte = 1;
  65.                         }
  66.                         if (nind == ncarat) {
  67.                                 system("CLS");
  68.                                 printf("\nHai vinto!!!!");
  69.                         }
  70.                         getchar();
  71.                         break;
  72.                 case 2:
  73.                         printf("estrazione della parola in corso.....");
  74.                         char parole[200][20];
  75.                         strcpy(parole[0], "carabinieri");
  76.                         strcpy(parole[1], "polizia");
  77.                         strcpy(parole[2], "vigiledelfuoco");
  78.                         //continuare;
  79.                         srand(time(NULL));
  80.                         e = rand() % 3;
  81.                         strcpy(segreta, parole[e]);
  82.                         ncarat = strlen(segreta);
  83.                         for (i = 0; i <= ncarat; i++) {
  84.                                 if (i < ncarat) {
  85.                                         vispar[i] = '-';
  86.                                 }
  87.                                 else {
  88.                                         vispar[i] = '\0';
  89.                                 }
  90.                         }
  91.                         system("CLS");
  92.                         for (k = 0; nerr != 10 && nind < ncarat; k++) {
  93.                                 printf("Digita la lettera: ");
  94.                                 scanf("%c", &l);
  95.                                 giusto = 0;
  96.                                 for (i = 0; segreta[i] != '\0'; i++) {
  97.                                         if (segreta[i] == l) {
  98.                                                 vispar[i] = l;
  99.                                                 giusto = 1;
  100.                                                 nind++;
  101.                                         }
  102.                                 }
  103.                                 printf("%s\n", vispar);
  104.                                 if (giusto == 0) {
  105.                                         nerr++;
  106.                                 }
  107.                                 printf("numero errori %d\n", nerr);
  108.                                 getchar();
  109.                         }
  110.                         if (nerr == 10) {
  111.                                 system("CLS");
  112.                                 printf("Hai perso!!!!");
  113.                                 printf("\n\nla parola era: %s", segreta);
  114.                                 sconfitte = 1;
  115.                         }
  116.                         if (nind == ncarat) {
  117.                                 system("CLS");
  118.                                 printf("\nHai vinto!!!!");
  119.                         }
  120.                         getchar();
  121.                         getchar();
  122.                         break;
  123.                 default:
  124.                         break;
  125.                 }
  126.         } while (comando != 0);
  127.         getchar();
  128.         return 0;
  129. }


Il warning scrive questo:
l'impiccato.cpp(83): warning C4244: 'argomento': conversione da 'time_t' a 'unsigned int'. Possibile perdita di dati.
chiedo gentilmente il vostro aiuto al fine di capire dove ho sbagliato.
codice sorgente scaricabile.


programmatore molto giovane
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:01
Lunedì, 03/02/2014
Quel warning non è importante ... puoi ignorarlo e il programma funziona comunque.

Se vuoi, puoi anche correggere con

srand((unsigned int)(time(NULL)));


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 20:29
Lunedì, 03/02/2014
Quel codice fa schifo, perchè c' è un metodo solo che fa 342656234512512354123412 cose? Cosa vuoi che possa capire una persona che non lo ha scritto? Senza nemmeno 1 commento? Posso vedere che è semplice, ma una cosa così mi disgusta al pensiero di leggerla...... Sul serio se provi a mettere ordine (spezzetti un altri metodi) è anche possobile che trovi da solo l' errore. Comunque ad occhio direi che il problema potrebbe essere un mancato nerr = 0 o di qualche altra variabile..... prova a controllare bene......

Ultima modifica effettuata da TheDarkJuster il 03/02/2014 alle 20:33
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:36
Lunedì, 03/02/2014
Non ha detto che c'è un errore ma solo quel warning, evidentemente nella srand


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 21:38
Lunedì, 03/02/2014
"si apre la finestra console, scelgo la modalità tiro al Bersaglio gioco la partita e ritorno al mio menu, scelgo nuovamente la modalità 2  e mi va in crash tutto. " evidentemente c' è una variabile che deve essere riportata a 0, l' unico motivo valido per cui il programma dovrebbe crashare è questo.....

PM Quote
Avatar
pila ricaricabile (Normal User)
Newbie


Messaggi: 13
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 9:49
Martedì, 04/02/2014
esattamente quello che avevo immaginato ma applicato alla variabile segreta, invece è proprio nerr, nind, che sono da inizializzare.
grazie mille fra una o due settimane metterò il gioco sul mio sito.
ho comunque inserito altri commenti (:k:per il suggerimnto)


programmatore molto giovane
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 21:08
Martedì, 04/02/2014
Ottimo, ma ti prego, da ora in avanti cura l' aspetto del codice e la sua "suddivisione" perchè devi capire che chi non lo ha scritto potrebbe avere difficoltà enormi a capire, soprattutto con sorgenti un po' più complessi.

PM Quote