Salve a tutti,
passo subito ad una piccola premessa: sto sviluppando un gioco in C servendomi delle librerie ncurses (vorrei evitare però panel.h, menu.h e form.h), ma mi sono appena arenato in una situazione alla quale non riesco a trovare rimedio, o meglio, quasi. Tale gioco è dotato di una classifica con i migliori 10 punteggi e il nome dei relativi giocatori che li hanno realizzati, e le coppie (nome, punteggio) vengono memorizzate in un file "scores". Al termine di ogni partita, se il punteggio totalizzato è più alto del più basso presente in classifica, si apre una finestra in cui viene richiesto l'inserimento del nome del giocatore, al fine di memorizzarlo nel file "scores". Per evitare casini però vorrei evitare che l'utente possa digitare più di 10 caratteri. Questo problema l'ho risolto (o meglio pensavo di averlo risolto) accettando un carattere per volta e inserendolo via via nel vettore di caratteri *name, in questo modo:
codice:
char name[10];
char ch;
int i=-1;
wmove(form, 2, 1);
while(ch=wgetch(form)!='\n'){
if(ch==' ' || i==10-1){
wmove(form, 2, 1+(i+1));
}
else{
i++;
name[i]=ch;
}
}
(form è una WINDOW creata nel main e passata alla funzione in cui è presente questo spezzone di codice)
In questo modo, effettivamente, arrivato al decimo carattere si ferma, e eventuali altri caratteri vengono scritti nello stesso punto (come volevo), solo che andando poi a vedere, tutti i caratteri della stringa risultano essere ^A.
Ho verificato (stampando a video la sequenza di caratteri appena digitata) e il problema avviene proprio nell'acquisizione dei caratteri, non nella scrittura sul file o la successiva visualizzazione nella classifica.
Qualche soluzione?
Grazie mille
Massimo