|
| 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 » | |
![]() |
#151 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
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? |
![]() |
![]() |
![]() |
#152 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
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 ![]() ![]() |
![]() |
![]() |
![]() |
#153 | |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
Quota:
"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. |
|
![]() |
![]() |
![]() |
#154 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Sull'MSDN trovo solo informazioni riguardo un'inputmask relativa alle finestre e fatta così Control.InputMask[ = cMask], non per la console
![]() |
![]() |
![]() |
![]() |
#155 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
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 --; } } 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 ![]() |
![]() |
![]() |
![]() |
#156 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Non fate caso ad alcuni commenti .. prima avevo provato altre cose e mi sono dimenticato di cambiarli ..
![]() Bye ![]() |
![]() |
![]() |
![]() |
#157 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
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. |
![]() |
![]() |
![]() |
#158 | |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Quota:
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 ![]() |
|
![]() |
![]() |
![]() |
#159 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
![]() Pensavo esistesse perché in effetti qualcosa su inputmask c'era ![]() |
|
![]() |
![]() |
![]() |
#160 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
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 !.
![]() |
![]() |
![]() |
![]() |
#161 | |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Quota:
![]() Bye ![]() |
|
![]() |
![]() |
![]() |
#162 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
![]() 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 |
|
![]() |
![]() |
![]() |
#163 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
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 ![]() |
![]() |
![]() |
![]() |
#164 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
...
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? |
![]() |
![]() |
![]() |
#165 | ||
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Quota:
Prova ad usare "%c" e stampare la riga carattere per carattere... Quota:
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 ![]() |
||
![]() |
![]() |
![]() |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
![]() |
||||
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 |