Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 10-07-2004, 17.36.53   #151
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Spiego quali sono le mie intenzioni.
mArray è un array di numeroNavi posizioni, ogni posizione conterrà una coordinata nel formato C3, I6... e questo dovrà essere fatto da posizionaNavi().
posizionaNavi() dovrà anche fare controlli sulla validità dell'input e quindi leggere la lettera per la colonna, il numero per la riga e assicurarsi che siano all'interno della griglia.
Dovrà prendere quindi il primo carattere valido (una lettera compresa tra A e J) e poi altri 2 caratteri validi adiacenti (perché c'è anche il 10), gestendo anche eventuali spazi all'inizio, alla fine o tra le coordinate.
Come mi conviene acquisire l'input al fine di rendere più semplice tutta questa storia?
Alhazred non è collegato   Rispondi citando
Vecchio 10-07-2004, 17.52.51   #152
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.502
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Sono tutti controlli da effettuare su una stringa.
1) Potresti effettuare due input separati, uno per la riga ed uno per la colonna ma poi dovresti verificare che la prima sia una lettera e la seconda un numero.

2) Potresti formattare l'input a piacimento, per esempio immettendo una maschera del tipo: "LNN" (LetteraNumeroNumero):

prototipo della funzione:
char *inputmask(char *mask)

La maschera imporrebbe il tipo e la posizione di ogni carattere sullo schermo decidendo se accettarlo/visualizzarlo o no.
Nel 3d di NS-1 "non ci capisco più niente" c'è già una parte del codice sviluppato ed accetta solo valori numerici.

Puoi dargli un'occhiata ed apportare le dovute modifiche, oppure attendere la risposta del Web che è sicuramente altrettanto valida
LoryOne non è collegato   Rispondi citando
Vecchio 10-07-2004, 18.10.37   #153
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.502
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Quota:
"nome funzione" undefined; assuming extern returning int...
Ti chiedo scusa Alh, è stata una mia mancanza.
"Purtroppo" non ho incluso stdio.h solo perchè "#include <stdio.h>" è già incluso nell'header conio.h nel mio DEV-C++ ed aggiungerlo sarebbe risultato superfluo.
LoryOne non è collegato   Rispondi citando
Vecchio 10-07-2004, 18.11.05   #154
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Sull'MSDN trovo solo informazioni riguardo un'inputmask relativa alle finestre e fatta così Control.InputMask[ = cMask], non per la console
Alhazred non è collegato   Rispondi citando
Vecchio 10-07-2004, 18.16.39   #155
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Ecco qui:

Codice:
void PosizionaNavi(int numeroNavi)
{
   int Count = numeroNavi, Count2;
   char c_col = ' ';
   char c_raw = ' ';
   char coorx[3];
   int coory[3];
   coorx[0] = '\0';

   printf("Inserire le coordinate per %i navi.\n",numeroNavi);
   
   while(Count > 0)
   {
      printf("Nave %i:    X_", Count);
      
      // a-f 
      while((c_col < 97) || (c_col > 102)) // invio = conferma
         c_col = getch();
      coorx[0] = c_col;
      
      // coor contiene la colonna .. inserire qui il codice per gestirla
            
      printf("%c    Y_", c_col);
      c_col = ' '; // reset

      // 0-9 
      while(((c_raw < 48) || (c_raw > 57))) // invio = conferma
         c_raw = getch();
      printf("%c", c_raw);
      c_raw = ' '; // reset
      coory[0] = (c_raw-48);

      // 0-9 o ENTER per non dare coordinata a cifra singola
      while(((c_raw < 48) || (c_raw > 57)) && (c_raw != 13)) // invio = conferma
         c_raw = getch();
      coory[1] = (c_raw-48);
      printf("%c", c_raw);
      c_raw = ' '; // reset
      printf("\n\r"); 
      Count --;
   }

}
Spero che tenga bene i tab...

in questa implementazione non permetto proprio all'utente di inserire lo spazio .. e non uso puntatori ..per gestire le coordinate a 2 cifre obbligo l'utente a darmi la seconda cifra oppure a premere invio per andare alla coordinata successiva ..

In quseto esempio non ho gestito gli array, ma ti fornisco 'coorx' e 'coory' che ad ogni "passaggio" del ciclo principale conterranno le coordinate della nave.

Spero sia utile e comprensibile.

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 10-07-2004, 18.19.12   #156
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Non fate caso ad alcuni commenti .. prima avevo provato altre cose e mi sono dimenticato di cambiarli .. ...

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 10-07-2004, 18.20.11   #157
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.502
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Non ci siamo capiti.
La devi fare tu
Comincia a studiarti le funzioni che il linguaggio ti propone.
Lascia perdere l'MSDN e tieni sotto mano il link che ti avevo suggerito alcuni post indietro.

Sfogliati tutte le funzioni che il C ti propone.
Quelle elencate sono sufficenti, anzi ce ne sono molte di più di quelle che servono.

Lascia perdere per un momento quello che stai facendo e leggi quella guida. Cerca di memorizzare le funzioni che il linguaggio ti offre, così da sapere cosa utilizzare e quando.

Non è mai tempo perso ed è una delle prime cosa da fare quando s'impara un linguaggio insieme alla sintassi.
LoryOne non è collegato   Rispondi citando
Vecchio 10-07-2004, 18.23.22   #158
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Quota:
Alhazred ha scritto
Spiego quali sono le mie intenzioni.
mArray è un array di numeroNavi posizioni, ogni posizione conterrà una coordinata nel formato C3, I6... e questo dovrà essere fatto da posizionaNavi().
posizionaNavi() dovrà anche fare controlli sulla validità dell'input e quindi leggere la lettera per la colonna, il numero per la riga e assicurarsi che siano all'interno della griglia.
Dovrà prendere quindi il primo carattere valido (una lettera compresa tra A e J) e poi altri 2 caratteri validi adiacenti (perché c'è anche il 10), gestendo anche eventuali spazi all'inizio, alla fine o tra le coordinate.
Come mi conviene acquisire l'input al fine di rendere più semplice tutta questa storia?
L'avrai notato ma lo dico solo per chiarezza..
nella mia implementazione basta restringere o allargare i numeri di validità nei vari "while" per regolare il raggio di input dell'utente...

Il primo ora è A-F .. il secondo 0-9

ovviamente occorrerà inserire pochi controlli supplementari sull'eventuale '00' .. '01' ecc.

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 10-07-2004, 18.29.34   #159
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da LoryOne
Non ci siamo capiti.
La devi fare tu
...
Doh

Pensavo esistesse perché in effetti qualcosa su inputmask c'era
Alhazred non è collegato   Rispondi citando
Vecchio 10-07-2004, 18.31.09   #160
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.502
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
L'implementazione del Web è ottima, pero' tu stai attento che le coordinate della colonna DEVONO essere maiuscole, sempre se non hai fatto altre modifiche al codice, s'intende !.
LoryOne non è collegato   Rispondi citando
Vecchio 10-07-2004, 18.33.23   #161
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Quota:
LoryOne ha scritto
L'implementazione del Web è ottima, pero' tu stai attento che le coordinate della colonna DEVONO essere maiuscole, sempre se non hai fatto altre modifiche al codice, s'intende !.
Sostituire 97 e 102 con 65 e 90..

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 10-07-2004, 18.43.55   #162
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da P8257 WebMaster


L'avrai notato ma lo dico solo per chiarezza..
nella mia implementazione basta restringere o allargare i numeri di validità nei vari "while" per regolare il raggio di input dell'utente...

Il primo ora è A-F .. il secondo 0-9

ovviamente occorrerà inserire pochi controlli supplementari sull'eventuale '00' .. '01' ecc.

Bye
Si, ho notato

Se ho capito bene ora mArray dovrei gestirlo come array a 2 capi, giusto? Uno per coorx e uno per coory, giusto?
Dovrei dichiararlo quindi t_Mossa *mArray[numeroNavi]; dato che t_mossa è il tipo strutturato con un int e un char che ho presentato più indietro?

Ultima modifica di Alhazred : 10-07-2004 alle ore 18.50.24
Alhazred non è collegato   Rispondi citando
Vecchio 10-07-2004, 19.00.55   #163
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Si esatto, il ritorno è praticamente un t_Mossa .. anche se con la mossaa vera e propria centra poco ... si tratta di due entità.. un char e un int... quindi un t_Mossa...

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 11-07-2004, 11.49.51   #164
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
...
while(((c_raw < 48) || (c_raw > 57)) && (c_raw != 13))
c_raw = getch();
coory[1] = (c_raw-48);
printf("%c", c_raw);
c_raw = ' '; // reset
printf("\n\r");
mArray[nave].colonna = coorx[0];
mArray[nave].riga = coory[0];
Count --;
nave++;
...

La soluzione proposta è a dir poco perfetta per quello che mi serve (Y)

Ho aggiunto il codice in neretto per assegnare al mio array le coordinate delle navi.
Per testarne la correttezza ho aggiunto anche delle stampe a video che avrebbero dovuto riportare il contenuto dei 2 campi

for(n=0;n<5;n++)
printf("%s%d ",&mArray[n].colonna,&mArray[n].riga);

Per la colonna è ok, per la riga ottengo dei numeri sballati, è forse sbagliato il %d della printf?

Altra cosa, se il numero di riga è composto da 2 cifre l'assegnazione dovrà essere diversa da quella scritta sopra, come dovrà essere fatta?
Alhazred non è collegato   Rispondi citando
Vecchio 12-07-2004, 09.12.02   #165
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Quota:
Alhazred ha scritto:
...
for(n=0;n<5;n++)
printf("%s%d ",&mArray[n].colonna,&mArray[n].riga);

Per la colonna è ok, per la riga ottengo dei numeri sballati, è forse sbagliato il %d della printf?


Prova ad usare "%c" e stampare la riga carattere per carattere...

Quota:
Altra cosa, se il numero di riga è composto da 2 cifre l'assegnazione dovrà essere diversa da quella scritta sopra, come dovrà essere fatta?
Se vuoi avere anche la riga di 2 caratteri (di cui il secondo facoltativo) devi inserire un altro while identico all'ultimo che ho usato per la colonna.. in modo che venga catturato il secondo carattere oppure ENTER...

Nell'implementazione non ho gestito la pressione del tasto ENTER.. ti sarai accorto che la seconda cifra della colonna si porta dietro 13 se l'utente batte invio per saltarne l'inserimento .. ti consiglio di gestire questa cosa anche perché potrebbe potenzialmente darti problemi in quanto la variabile è un singolo char .. e il numero 13 è formato da 2 cifre.. quindi c'é un "3" che va .. non si sa dove....

Bye
P8257 WebMaster non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
La grande battaglia dei super eroi! Sbavi Chiacchiere in libertà 83 27-02-2009 10.43.39
battaglia navale in c# Joy&Lu Programmazione 3 01-09-2008 15.08.58
Il Signore degli Anelli - La Battaglia per la terra di mezzo Darth Maul Masterizzazione Giochi Games 0 01-09-2006 18.16.18
[C] Battaglia Navale (versione client server) in Linux Nanri Programmazione 11 06-08-2005 14.50.27

Orario GMT +2. Ora sono le: 14.14.07.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.