Pagina 1 di 1

[C] Più input sulla stessa riga

Inviato: gio 19 feb 2009, 20:48
da mechanicus
Noto con piacere che c'è uno spazio dedicato alla programmazione in generale :D
Bene, il problema è questo: perché scanf accetti un input è necessario premere INVIO; così facendo, però, il cursore va capo. Come fare perché non vada a capo?

P.S.: in tutto il web (così sembra da google) non c'è chi sappia rispondere

Re: [C] Più input sulla stessa riga

Inviato: gio 19 feb 2009, 21:03
da shark1500
C'era una cosa tipo getchar se non sbaglio

Re: [C] Più input sulla stessa riga

Inviato: gio 19 feb 2009, 21:18
da targzeta
mechanicus ha scritto:...P.S.: in tutto il web (così sembra da google) non c'è chi sappia rispondere
In tutto il web forse ci sono molti che non capiscono che vuoi dire, ma che nessuno che sappia rispondere mi sembra strano :). Cosa vuoi fare? Perchè io sono fra quelli che non ha capito!

Spina

Re: [C] Più input sulla stessa riga

Inviato: gio 19 feb 2009, 22:00
da phobos3576
Se non vuoi che il cursore vada a capo, devi scrivere qualche riga di codice C.
Ad esempio, una routine che cattura l'input e fa avanzare il cursore verso destra ogni volta che premi un tasto; quando la routine si accorge che hai premuto Invio, termina la fase di input senza andare a capo.

La funzione scanf non è molto adatta per fare queste cose; puoi usare, ad esempio, la funzione getch().

Re: [C] Più input sulla stessa riga

Inviato: gio 19 feb 2009, 22:05
da targzeta
phobos3576 ha scritto:...La funzione scanf non è molto adatta per fare queste cose; puoi usare, ad esempio, la funzione getch().
Non è così semplice, si deve modificare il comportamento del terminale, in questi casi si dovrebbero usare le curses.

Spina

Re: [C] Più input sulla stessa riga

Inviato: gio 19 feb 2009, 22:38
da mechanicus
spina ha scritto:
mechanicus ha scritto:...P.S.: in tutto il web (così sembra da google) non c'è chi sappia rispondere
In tutto il web forse ci sono molti che non capiscono che vuoi dire, ma che nessuno che sappia rispondere mi sembra strano :). Cosa vuoi fare? Perchè io sono fra quelli che non ha capito!
Cfr.
- http://www.p2pforum.it/forum/showthread ... d&t=276765
- http://www.hardforum.com/showthread.php?p=1033218576
sono post non miei, in linea da mesi, senza risposta.

Ad ora sto valutando una soluzione basata su getchar, sebbene confidassi in una più bell'e pronta.

Re: [C] Più input sulla stessa riga

Inviato: gio 19 feb 2009, 22:42
da targzeta
mechanicus ha scritto:...Ad ora sto valutando una soluzione basata su getchar, sebbene confidassi in una più bell'e pronta.
La soluzione bell'è pronta sono le curses :D

Spina

Re: [C] Più input sulla stessa riga

Inviato: gio 19 feb 2009, 23:14
da mechanicus
le curses... so cosa sono, nulla più. pensavo di aggiungerle, forse, in un secondo momento (ma anche no).
comunque, puoi farmi un esempio?

P.S.: getchar non va.

Re: [C] Più input sulla stessa riga

Inviato: ven 20 feb 2009, 8:18
da targzeta
mechanicus ha scritto:le curses... so cosa sono, nulla più. pensavo di aggiungerle, forse, in un secondo momento (ma anche no).
comunque, puoi farmi un esempio?

P.S.: getchar non va.
Te l'ho detto che non era così semplice, è il terminale che devi modificare. Un esempio? Ad esempio potresti leggerti il manuale delle curses :D.

Spina

P.S. Per inciso, c'è almeno un altra soluzione, usare le termios(3), ma non so perchè mi hanno sempre consigliato le curses...forse perchè termios è conforme solo allo standard POSIX?

Re: [C] Più input sulla stessa riga

Inviato: ven 20 feb 2009, 9:57
da Blizzard
se vuoi dai un'occhiata a questo
http://santostefanogiovanni.blogspot.co ... linux.html
l'ho scritto con le curses (o meglio ncurses).

muove il cursore in ogni dove quindi è abbastanza esplicativo.

Se non vuoi usare librerie, fammi pensare, si è "tosta" .

ciao
Giovanni

Re: [C] Più input sulla stessa riga

Inviato: mer 25 feb 2009, 15:27
da mechanicus
Grazie a tutti per le vostre risposte; tuttavia mi pentirei di non aver fatto un ultimo tentativo.
C'è nessuno che sa come alternare, in C, input e output sulla stessa riga di terminale usando la sola libreria standard?
Grazie, ciao

Re: [C] Più input sulla stessa riga

Inviato: mer 25 feb 2009, 17:23
da targzeta
Vabbuò :(, si è capito che sei un cattivo studente. Questo è un mio vecchio esempio usando la termios, di come puoi prelevare l'input dell'utente senza aspettare che esso prema "enter", e quindi di analizzarlo prima di stamparlo in output.

Codice: Seleziona tutto

/*
 * Questo e' un esempio di un programma che legge 5 caratteri dall'input
 * e gli analizza prima di stamparli sul terminale, in questo esempio
 * i newline non vengono inviate cossicché anche se l'utente preme
 * invio, il programma non va a capo.
 */

#include <stdio.h>
#include <string.h>
#include <termios.h>

int main ()
{
  int i, a;
  struct termios new, old;

  tcgetattr(0,&old); /* Prelevo il settaggio corrente */

  memcpy(&new, &old, sizeof(struct termios));

  new.c_lflag &= ~(ICANON | ECHO); /* Disabilito il modo canonico e l'echo */
 
  new.c_cc[VMIN]=1; /* Setto il minimo numero di caratteri a 1 */

  tcsetattr(0,TCSANOW,&new); /* Setto il nuovo termios, subito(TCSANOW) */

  for ( i = 0; i < 5; i++ )
    {
      a=getchar(); /* Prelevo un carattere dall'input standard */
      if ( a != '\n')
       putchar(a);
    }

  tcsetattr(0,TCSANOW, &old);  /* Ripristino i settaggi originali */
  
  return 0;
}
Un buon studente, dopo che uno gli da le indicazioni per risolvere il problema, le ricerche se le fa da solo :D

Spina

P.S. Ora spero che almeno stampare l'output sulla stessa riga ci arriverai da solo a farlo :)