|
| 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 » | |
06-08-2004, 20.19.07 | #466 | ||||||
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Quota:
Quota:
Quota:
Quota:
Quota:
Quota:
|
||||||
06-08-2004, 21.43.14 | #467 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Per il problema dei tasti funzione, ho letto il codice postato da Lory, ma non sono riuscito a risolvere nel mio programma.
Non posso mettere un altro caso perché viene ignorato in quanto il carattere restituito è valido ai fini dell'input. Dal codice di Lory sarei tentato di dire che i tasti funzione nella getch() restituiscono 0, ma non ne sono sicuro, inoltre la getch() non prevede valori di ritorno errati. Come glielo faccio riconoscere? |
06-08-2004, 22.13.21 | #468 | |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Quota:
La spiegazione è alquanto semplice e più volte si è presentata nel corso di questo 3D. Codice:
char c[]={'a','b','c','d','e','f','g','h','i','l', 'm','n','o','p','q','r','s','t','u','v'}; printf("%i",strlen(c)); Codice:
char c[]={'a','b','c','d','e','f','g','h','i','l', 'm','n','o','p','q','r','s','t','u','v'}; printf("%i",sizeof(c)/sizeof(char)); Perchè nel primo caso no ? Innanzitutto non si è specificato la dimensione dell'array che in questo caso è dinamico, non statico. Il compilatore sa che deve predisporre un quantitativo di memoria in base al tipo di array (char) ma non è così sicuro di quanta ne serva. Sicuramente ne allocherà tanta quanto basta per contenere tutto l'array più qualcosa che contiene chissà quali informazioni. Quel qualcosa però non sfugge all'istruzione strlen(), la quale ricerca il famoso null-char ('\0') all'interno dell'array che a parer suo indica la fine della sequenza. Utilizzare le cosìdette Safe Strings è fondamentale quando si vogliono usare le funzioni di manipolazione delle stringhe incluse nell'header string.h. Per fare in modo che strlen() possa essere utilizzato correttamente è necessario aggiungere il terminatore nullo alla sequenza, quindi: Codice:
char c[]={'a','b','c','d','e','f','g','h','i','l', 'm','n','o','p','q','r','s','t','u','v','\0'}; printf("%i",strlen(c)); |
|
07-08-2004, 01.14.01 | #469 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
In preda all'insonnia .. ti dò una traccia Alh, su come "carpire" il tasto funzione .. in mezzo agli altri casi della vita
Riposto il codice di Lory leggermente modificato: Codice:
#include <stdio.h> #include <conio.h> main(void){ char c; printf("Premi un tasto. Escape termina il programma\n"); while(c!=27){ //Escape termina il programma c=getch();//Non sempre cio che restituisce getch() corrisponde ad //un solo carattere printf("Codice ASCII [%i] - Carattere restituito [%c]\n",c,c); switch(c){ case 0 : printf("Il tasto premuto e' un tasto funzione !\n"); break; case (0+59) : printf("Ti ho beccato, hai premuto F1.. ;-)\n"); break; case 97 : printf("Qui hai premuto la a e posso individuarla ...\n "); break; case -32 : printf("Il tasto premuto non e' un tasto funzione !\n"); } } } Bye |
07-08-2004, 09.47.44 | #470 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Mi studierò adesso l'esempio proposto, intanto posto il codice di UserInput() che adesso funziona senza che io ne conosca il motivo.
Codice:
... char AllowedCh[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'}; char AllowedNum[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'}; ... default: if(max == 1) { for(Count = 0; Count < strlen(AllowedCh); Count++) { if(Current == AllowedCh[Count] && (Count2 < max)) { printf("%c", Current); Buff[Count2] = Current; Count2++; cursore++; } } break; } else { for(Count = 0; Count < strlen(AllowedCh+1); Count++) { if(Current == AllowedNum[Count] && (Count2 < max)) { printf("%c", Current); Buff[Count2] = Current; Count2++; cursore++; } } break; } |
07-08-2004, 10.32.12 | #471 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Ho capito come fare, ma devo mettere tutti i case 1 per 1 o c'è un modo per dare un range?
|
07-08-2004, 12.25.16 | #472 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
No, a quanto pare non ho capito, avevo messo
case(0+65): break; case(0+66): break; ... e così via fino a J convinto che lo 0 all'inizio gli avrebbe fatto riconoscere li tasto funzione, ma così non mi accetta neanche i caratteri inseriti coi tasti giusti. |
07-08-2004, 12.27.33 | #473 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Quota:
|
|
07-08-2004, 12.46.48 | #474 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Quota:
|
|
07-08-2004, 14.15.32 | #475 | |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
Quota:
(0+59) = F1 (0+60) = F2 (0+61) = F3 e così via... Leggi i risultati del programma di Lory... E' in questi casi che il ciclo deve "breakkare"... Se tu "breakki" a (0+65) ovviamente non potrai inserire la A... Bye |
|
07-08-2004, 14.21.07 | #476 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
Codice:
strlen(AllowedCh+1) Rivedi il codice, se Max = 2 allora mi sembra che si debbano accettare solo numeri giusto? Perché non utilizzare 'strlen(AllowedNum)' ? Bye |
07-08-2004, 14.35.10 | #477 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Quota:
|
|
07-08-2004, 14.56.59 | #478 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
No, deve funzionare...
Colpa del null-terminator .. ricordi cosa disse Lory sulle safe strings?... Codice:
char AllowedCh[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', '\0'}; char AllowedNum[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '\0'}; |
07-08-2004, 15.31.46 | #479 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Ok, così va anche con AllowedNum.
|
07-08-2004, 15.38.08 | #480 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Quota:
Codice ASCII [0] - Carattere restituito [ ] le parti messe da te restituiscono F1 = Codice ASCII [59] - Carattere restituito [;] F2 = Codice ASCII [60] - Carattere restituito [<] F3 = Codice ASCII [61] - Carattere restituito [=] ... fino a F6 però non mi interessano dato che comunque vengono ignorati (non forniscono un input valido) i problemi vengono proprio da F7, F8, F9, F10, pagup e Home e questi hanno gli stessi codici delle lettere da quanto appare dal programma di Lory, non capisco. |
|
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
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 |