Newsgroup: it.comp.lang.c
Titolo: password in C

se qualcuno di voi sa come prendere qualcosa dallo standard input e fare
uscire a video solo asterischi con le librerie standard me lo faccia sapere
grazie



Non e' possibile con la libreria standard, devi fare
riferimento a funzioni specifiche del tuo compilatore.
--
Andrea Laforgia - walkietalkie(at)
libero.it
http://www.geocities.com/AndreaLaforgia

chianese vincenzo wrote:

Su che sistema lavori?
-- 
Davide Petilli
e-mail. 
davide....@NOSPAM.libero.it
Per scrivermi togli NOSPAM dal mio indirizzo!

 grazie
utilizzi getc (o getch, adesso non ricordo) che non fanno uscire a video il
carattere digitato da tastiera estampi per ogni carattere un asterisco
-- 
Posted from 
cclinf40.polito.it
 [130.192.9.60] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 grazie
prova cosi':
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define MAX_LEN_PWD 10
int main(void)
{
     int i,count;
	/* devo togliere 1byte per il fine stringa */
	char password[MAX_LEN_PWD]; 
	i= count = 0;
	system("cls");
	printf("Digitare la Password, massimo %d caratteri:", MAX_LEN_PWD-1);
	i=getch();
	if(i== '\r') 
		return(-1);
	for(; count < MAX_LEN_PWD - 1;)
	{
		 printf("");
		 password[count++]=i;
		 fflush(stdin);
		 i=getch();
		 if(i=='\r') break;
	}
	password[count]='\0';
	printf("\nPassword digitata: %s\n",password);
	return(0);
}
-- 
Posted from  [213.82.129.50] 


		 fflush(stdin);
Inutile e pericoloso.


Inutile e pericoloso.
posso domandarti in che senso? cioè cosa intendi in questo contesto
per pericoloso?
--
Rhymes
--------------------------
rhy...@myself.com
http://www.foxhound-games.it
http://embyte.mascanc.net
--------------------------
Linux User #219707

per pericoloso?
fflush non ha un comportamento definito per gli stream di
input (v. standard), per cui, avendo un "undefined behavior"
puo' anche formattarti il disco.


puo' anche formattarti il disco.
grazie per il chiarimento. non ero a conoscenza della presenza di
"undefined behavior". ciao


 puo' anche formattarti il disco.
ah ! questa e' bella !! la metteri su it.discussioni.leggende-metropolitane
in effetti mi e' capitato di compilare un programma con fflush(stdin); e mi si e' accesa la stampante... ;)
per favore non scherziamo !
bye

puo' anche formattarti il disco.
col compilatore Borland fflush(sdin) ha (solo?) l'effetto di liberare
il buffer di dati di input. 
Senza tale funzione come si può realizzare la stessa cosa?
Comportamento indefinito significa non definito dallo standard (il che
è corretto) o non definito dal compilatore (forse "undefined
behavior") il che è assurdo.

per favore non scherziamo !
Non sto scherzando, leggi il documento standard del
linguaggio e poi ne riparliamo.
Evidentemente non hai la minima idea di cosa significhi
"undefined behavior" secondo la standard ISO del linguaggio
C.
Il comportamento indefinito presuppone qualsiasi forma di
comportamento (la formattazione del disco e' un caso
estremo, preso ad esempio, ma perfettamente lecito nel caso
accadesse), non e' contemplato dallo standard, non lo si
vuol contemplare ed e' quindi pericoloso sfruttarlo.
fflush(), te lo ripeto, non ha un comportamento definito per
i flussi di input, ma SOLO per quelli di output.


behavior") il che è assurdo.
Undefined behavior significa non definito dallo standard e
quindi non standard.
Chi utilizza fflush() su stream di input produce codice
assolutamente non portabile.


Aggiungo il link:
http://www.eskimo.com/~scs/C-faq/q11.33.html


 wrote:
:>ah ! questa e' bella !! la metteri su it.discussioni.leggende-metropolitane
:>in effetti mi e' capitato di compilare un programma con fflush(stdin); e mi si e' accesa la stampante... ;)
:>per favore non scherziamo !
: Non sto scherzando, leggi il documento standard del
: linguaggio e poi ne riparliamo.
: Evidentemente non hai la minima idea di cosa significhi
: "undefined behavior" secondo la standard ISO del linguaggio
: C.
 evidentemente stavi solo esagerando e ho voluto sdrammatizzare...
sei troppo permaloso per i miei gusti e non voglio cominciare un flame...
sorridi ogni tanto !
bye

sei troppo permaloso per i miei gusti e non voglio cominciare un flame...
Non sono permaloso, il C non e' roba mia, ma mi piace
puntualizzare con chi dimostra di non conoscere certi
aspetti del linguaggio.
Non che ci sia niente di male nel non conoscere certi
aspetti del linguaggio, ma quando si ribatte bisogna sapere
bene che cosa si sta dicendo.
Chiudo qui, nessuno vuole alimentare flame, ma i messaggi
del ng (anche quelli vecchi) vanno letti.
Questo argomento e' stato affrontato centinaia di volte.


behavior") il che è assurdo.
Ci sono cose su cui lo standard dice "implementation dependent"
e questo significa che il produttore del compilatore deve
spiegarti cosa succede. Ci sono cose su cui lo standard dice
"undefined behaviour" e in questi casi il produttore del
compilatore puo' semplicemente completamente ignorare il
problema... ergo chiamare fflush su uno stream di input
potrebbe accedere ad esempio a dei campi non inizializzati
(negli stream di input) e fare schifezze indicibili.
Ovviamente un produttore puo' anche implementare deliberatamente
un tetris 3D se fai fflush su uno stream di input e documentare
questa cosa sul manuale: "undefined behaviour" non significa
che il programma deve necessariamente creare problemi.
Programmi che usano questa "feature" sono pero' non portabili
e potrebbero bloccarsi (o fare danni) su sistemi diversi ma
comuque standard (o anche sulla prossima versione dello
stesso compilatore se il produttore cambia idea su questo
punto ... cosa che e' liberissimo di fare non essendo
vincolato da nessuno).
Normalmente sulle parti "undefined behaviour" i produttori di
compilatori e librerie semplicemente ignorano il problema e
succeda quello che succeda... di lavoro se ne trova da fare
gia' abbastanza sulle parti in cui lo standard chiede
comportamenti ben definiti...
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 wrote:
modificando ...
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define MAX_LEN_PWD 9
int prendipass(int lunghezza, char pass[]);
int main(void)
{
char password[MAX_LEN_PWD+1];
int j, n;
system("cls");
printf("Digitare la Password, massimo %d caratteri: ", MAX_LEN_PWD);
for(n=1;n<=4;n++) 
   { j=prendipass(MAX_LEN_PWD, password);
     if(j==0){printf("\nPassword digitata: %s\n",password); return 0;}
 else if(j==1 && n!=4) printf("\nCarattere non previsto, ridigita: ");
 else if(j==2 && n!=4) printf("\nPassword troppo corta, ridigita: ");
 else if(j==3 && n!=4) printf("\nPassword troppo lunga, ridigita: ");
  }
 return -1;
}
int prendipass(int lunghezza, char pass[])
{unsigned  int i; 
 int count=0, h=0;
 if(lunghezza>0)
    { do{i=getch();
         if(i!='\r') printf("*");
         pass[count++]=(char) i;
         if(i<13 || (i>13 && i<=31) || i==127) {h=1; return h;}
         }while( i!='\r' &&  count<=lunghezza );
      if(count==lunghezza+1 &&  i!='\r' ) h=3;
      else if(count<5) h=2;
      else pass[count]='\0';
      return h;
    }
 else return -1;
}

     while (getchar() != '\n');
ok grazie.


prova cosi':
perchè non c'è una interfaccia standard nella libreria per le chiamate
a sistema?
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define MAX_LEN_PWD 10
int main(void)
{
     int i,count;
	/* devo togliere 1byte per il fine stringa */
	char password[MAX_LEN_PWD]; 
	count = 0;
	system("cls");
printf("Digitare la Password, massimo %d caratteri:", MAX_LEN_PWD-1);
	i=getch();
	if(i== '\r') 
		return(-1);
	for(; count < MAX_LEN_PWD - 1;)
	{
		 if(i!='\r')printf("*");
		 password[count++]=(char) i;


On Sat, 15 Sep 2001 07:07:00 GMT, 
levamigi...@yahoo.co.uk
(Giuseppe| |) wrote:
Cosa non va?
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define MAX_LEN_PWD 9
#define MIN_LEN_PWD 5
int prendipass(int lunghezza, int min, char pass[]);
int main(void)
{ char password[MAX_LEN_PWD+1];
  int j, n;
  system("cls");
  printf("Digitare la Password, massimo %d caratteri: ", MAX_LEN_PWD);
 
  for(n=1;n<=4;n++) 
    { j=prendipass(MAX_LEN_PWD, MIN_LEN_PWD, password);
     if(j==0){printf("\nPassword digitata: %s\n",password); return 0;}
 else if(j==1 && n!=4) printf("\nCarattere non previsto, ridigita: ");
 else if(j==2 && n!=4) printf("\nPassword troppo corta, ridigita: ");
 else if(j==3 && n!=4) printf("\nPassword troppo lunga, ridigita: ");
    }
 system("cls");
 return -1;
}
int prendipass(int lunghezza, int min, char pass[])
{unsigned  int i; 
 int count=0;
 if(lunghezza>0)
    { do{i=getch();
         if(i!='\r') printf("*");
         pass[count++]=(char) i;
      if (!(i=='\r' || i==' ' || ( i>='a' && i<='z') 
           || (i>='A' && i<='Z') || (i>='0' && i<='9')  ) ) return 1;
         }while( i!='\r' &&  count<=lunghezza );
      if(count==lunghezza+1 &&  i!='\r' ) return 3;
      else if(count<min+1) return 2;
      else pass[count]='\0';
      return 0;
    }
 else return -1;
}

sorridi ogni tanto !
Inutile...Non credo sia permaloso, o almeno non mi ha dato questa
impressione, ma certamente pignolo. Ricorda un certo Spock...
BTW...il suo apporto al gruppo e' notevole...
(PS: x LaForgia, ti prego non dirmi che sono OT...lo so gia'!)
ciao, acc.   
a...@libero.it

(PS: x LaForgia, ti prego non dirmi che sono OT...lo so gia'!)
Non e' logico postare, se si sa gia' di essere OT.


il problema è che la libreria conio non posso utilizzarla quindi il mio
problema è proprio quello di utilizzare funzioni diverse da getch() e
getche()
--------------------------------
Inviato via 
http://usenet.iol.it