|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2004
Città: Venezia
Messaggi: 192
|
[C] scrivere nella stessa posizione?
ciao, ho un piccolo problema con il C.
nel mio prog, ad un certo punto dovrei aspettarmi un numero intero compreso tra 1 e 6. Nel caso in cui il numero inserito non sia valido, il prog mi ripropone la possibilità di inserire un altro numero andando a capo col cursore...e fin qui tutto ok... vorrei invece che se il numero inserito fosse non corretto il cursore rimanesse nella stessa posizione, dandomi la possibilità di riscrivere sopra alla immisione precedente... ![]() ciao
__________________
![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 1218
|
devi fare cosi:
Codice:
#include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> /* Per i socket PF_UNIX */ #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include "common.h" /* nomi delle pipe */ int main (int argc, char * argv []) { int clientFd, serverLen; int digit, number, i, result; struct sockaddr_un serverUNIXAddress; struct sockaddr* serverSockAddrPtr; serverSockAddrPtr = (struct sockaddr*) &serverUNIXAddress; serverLen = sizeof (serverUNIXAddress); /* Crea un socket UNIX, bidirezionale, protocollo di default */ clientFd = socket (PF_UNIX, SOCK_STREAM, DEFAULT_PROTOCOL); serverUNIXAddress.sun_family = PF_UNIX; /* Dominio del server */ strcpy (serverUNIXAddress.sun_path, SOCK_NAME); /* Nome del server */ do { /* Stabilisce la connessione con il server */ result = connect (clientFd, serverSockAddrPtr, serverLen); if (result == -1) sleep (1); /* Se fallisce, riprova dopo breve attesa */ } while (result == -1); /* invia la sequenza da convertire */ for (i=1; i<argc; i++) { digit=atoi(argv[i]); write(clientFd, &digit, sizeof(int)); } /* ... e chiude con il numero di fine sequenza */ digit=EOS; write(clientFd, &digit, sizeof(int)); /* Infine attende il risultato */ read(clientFd, &number, sizeof(int)); printf("Il risultato e` : %d\n", number); return 0; }
__________________
Athlon64 3500 (Winchester), Asus A8V-E Deluxe, X700Pro 256MB, Maxtor 200GB Sata,Ali Enermax 400W, Mast. Pionner 109,Lettore dvd LG, Creative 2.1 3200, LG 1980q, Canon Pixma mp500. |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ehh??? Che è tutta 'sta roba!?
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Dec 2004
Città: Venezia
Messaggi: 192
|
ho capito, giustamente, io le leggo l'input con scanf che va da sola a capo dopo aver premuto invio...proverò a cercare nella rete
![]()
__________________
![]() |
![]() |
![]() |
![]() |
#5 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
andbin, mi meraviglio di te
![]() non si vede? quello è palesemente un programma che, ehm, dunque... crea un socket TCP verso non si sa quale indirizzo presumibilmente hardcoded (pessimo), effettua stupidamente infiniti tentativi di connessione bloccandosi per un secondo tra l'uno e l'altro nell'illusa speranza che in un secondo l'host torni up o che l'amministratore abbia aperto quel target sul firewall, invia all'host remoto dei numeri potenzialmente errati (la atoi non distingue tra "0" ed input non valido e non gestisce l'overflow) credendo peraltro di inviargli singole cifre, gli manda un simbolo conclusivo a gestione speciale che introduce una potenziale vulnerabilità*, riceve un intero dall'host remoto, ed infine lo stampa su schermo. a proposito, se nel mentre cade la connessione il programma stampa un numero senza senso. non lo trovi pertinente? ![]() * il simbolo speciale potrebbe essere introdotto dalla linea di comando Ultima modifica di 71104 : 05-03-2007 alle 21:43. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Sì ... ma ... non capisco cosa possa c'entrare (l'uso dei socket) con la richiesta iniziale di alberto.frz, cioè il poter riposizionare il cursore nel punto dove si era fatto l'input.
![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Feb 2003
Messaggi: 3571
|
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Codice:
fprintf(stdout,"%c[%d;%dH",27,y,x); ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Su Linux è OK, su Windows no. Sui "vecchi" Win95/98 si poteva caricare ANSI.SYS che gestiva questi escape.
Comunque bastava scrivere: printf ("\033[%d;%dH", y, x);
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 07-03-2007 alle 10:30. |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() boh ? contenti voi ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#11 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
![]() |
![]() |
![]() |
#13 |
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Per il supporto ANSI in Windows NT/2k/XP, modificare il file C:\WINDOWS\SYSTEM32\CONFIG.NT aggiungendo la seguente riga alla fine del file:
device=%SystemRoot%\system32\ansi.sys Creare quindi un link a C:\WINDOWS\SYSTEM32\COMMAND.COM. Eseguire il link, ed ecco il supporto ANSI in XP. |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() ![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#15 | |
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:12.