Newsgroup: it.comp.lang.c
Titolo: ancora un aiutino ;p

Innanzi tutto grazie a chi mi ha già aiutato con altre domande, e grazie
anche a chi lo farà.
spero sia la mia ultima domanda (graffatina):
devo fare una specie di interfaccia testuale tra il mio programma e
l'utente....
i problemi maggiori li trovo nel leggere i dati in input:
mi spiego meglio, i dati li leggo , ma non come vorrei.
 esempio:
char x,y;
printf ("inserisci il valore che vuoi assegnare alla variabile x : ");
scanf("%c",x);
printf ("inserisci il valore che vuoi assegnare alla variabile y : ");
scanf("%c",y);
....
quando digito il primo char e premo invio, autamticamente viene assegnato
alla x il carattere digitato e a y il carattere invio.... esiste una
funzione che mi permette di gestire questa cosa o faccio da solo? il fatto è
che non viene una cosa molto elegante.
in altri casi mi servirebbe gestire l'errore di digitazione:
per esempio nel caso precedente l'utente non dovrebbe avere la possibilità
di digitare più di un carattere;cioè come faccio a far si che il cursore
possa muoversi solo negli spazi riservati alla risposta?... e come si fa a
spostare il cursore con i tasti des,sin,alto basso senza fargli scrivere
tutti quei caratteri strani?
esiste una funzione tipo la readkey del pascal?non mi sembra ci sia qualcosa
del genere.
esiste la funzione inversa di atoi()  (Ascii To Integer) ?
Quasi OT..... anzi forse OT
a quasi dimenticavo uso linux.... quindi esiste un puntatore allo standard
output?? come si risale a questo avendo il file descriptor(o anche di
un'altro file)?? e il contrario??
lo so che sono domande stupide, ma per me vogliono dire molto!!
ciao e ancora grazie

 esiste la funzione inversa di atoi()  (Ascii To Integer) ?
Si usa sprintf().
-- 
Posted from  [80.105.34.80] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Scusami ancora, ma come faccio ad usare la funzione fseek() sullo standard
output??
mi risolverebbe parecchi dei problemi.
nel caso la potessi usare, andrei a sovrascrvere quello che è già stato
scritto??

 ha scritto nel messaggio
news:dJHT7.15966$OP2.6...@news2.tin.it...

Non ho mai visto nessuno usare fseek() sullo stdout, lo stdin, o qualsiasi
altro standard stream.
Dome
--
------------------------------------------
Domenico Troiano
AI & 3D Coder TFS Project
www.panther3d.com
red...@panther3d.ath.cx
------------------------------------------

 Si usa sprintf().
E itoa no? Non è standard?
Dome

 scanf("%c",y);
Oltre tutto cio che hai detto...
secondo me non funziona granche ;)
scanf() accetta come parametri dei puntatori alle variabili da rimpire
ovviamente, mentre te gli passi le variabile stesse.
Debugga un po!



prova un po' inserendo il getchar lì in mezzo. Per la scansione delle
risposte prova ad usare un vettore di
caratteri ( char risp[50] ; ) in cui metterai tutto ciò che l'utente digita
e usare solo risp[0] per fare il controllo su ciò che è stato digitato.
quindi prova qualcosa tipo
char risp[50],x,y;
.
.
.
printf("inserisci x : " );
scanf("%s",risp);
getchar();
x=risp[0];
printf("damme y : ");
scanf("%s",risp);
y=risp[0];
puoi usare dei cicli do--while se ti serve che l'utente immetta solo un
certo tipo di valore.
Fly

E itoa no? Non è standard?
No, non e' standard.
-- 
Andrea Laforgia
#exclude <windows.h>

y=risp[0];
Quella scanf() sta bene in molti posti... non quando leggi l'input
pero' :P
Sconsigliata vivamente, in favore di:
    fgets(risp, 50, stdin);
Mox :)

 ha scritto nel messaggio
news:j6AfPBJkQZm22i...@4ax.com...

Combinata con la getchar() fa il suo effetto la scanf... ^__^
ciao!
Fly

Combinata con la getchar() fa il suo effetto la scanf... ^__^
Ci vuole un ciclo di getchar(), non uno solo.


Questa è brutta forte.... comunque la cosa delle risposte l'ho risoplta con
una funzione char nextchar() che fa il controllo sul carattera appena
letto.....
comunque ecco il problema:
int maschera_1()
{ int i,min_buff=0;
  int max_buff=0;
  char lung_file[256];
  char hd;
  char man;
system("clear");
printf("\n\n\n\n\tOra si potranno scegliere i parametri per eseguire le
misurazioni sulla read:\n");
 printf("\t Digitare 'h' per l'help, 'b' per tornare al menu' precedente ,
'any_key' per continuare : ");
 man=nextchar();
 switch (man) {
 case 'h' :{ printf("blablabla\n");
             return(maschera_1());
             break;};
 case 'b' : {main();
             break; };
 default : break;
 };
 do{printf("\t\t1.Inserire la grandezza del file da leggere in MB (min 1):
");
    scanf("%s",lung_file);
    if ((atoi(lung_file))<1) errore;
    else break;
    }while (1);
 do{ printf("\t\t2.Per leggere da Hard Disk locale premere 'l' , per leggere
da NFS premere 'n': ");
     hd= nextchar();
     if ((hd=='l') ||(hd=='n')) break;
     errore;
     }while (1);
 do {printf("\t\t3.Inserire il valore minimo del buffer di lettura espresso
in byte [min 256;max 524288(=512KB)]: ");
     scanf("%d",&min_buff);
     if ((min_buff<256)||(min_buff>524288)) errore;
     else break;
     } while (1);
 do {printf("\t\t4.Inserire il valore massimo del buffer di lettura espresso
in byte (max 524288=512KB): ");
    scanf("%d",&max_buff);
    if ((max_buff>524288)||(max_buff<=min_buff)) errore;
    else break;
    } while (1);
printf("\n\n ciao");
return(1);
}
il problema l'ho localizzato..... non mi stampa "ciao"!!!!!
se io prendo la printf e la metto da qualsiasi altra parte del programma la
esegue tranquillamente!!!!
mentre lì scrive solo "\n\n"
ma perchè??????????????
ho controllato tutto!!!!
questa cosa è importante, perchè al posto della printf ci va un pezzo di
codice che esegue anche fork ed exec.
uso gcc sotto linux...
Scusate se non lo commento ma è veramente una ca$$ata.... si tratta solo di
acquisizioni di parametri con un case e un po' di while.....errore è una
macro che stampa semplicemente ERRORE!!!!