Condividi:        

Problemi in PERL con il ciclo IF

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Anthony47, Triumph Of Steel, archimede

Problemi in PERL con il ciclo IF

Postdi patrix966 » 16/12/05 18:17

Buonasera a tutti!Ragazzi e un paio di giorni che stò dietro al Perl!
è abbastanza facile..inoltre trovo che è molto simile ad altri linguaggi..se non fosse per il fatto che mi sono fermato su uno stupido ciclo IF!
Vi scrivo lo script:

print "LA PREGHIAMO DI CONFERMARE IL SUO NOME \n";
print " \n";
print"IL NOME INSERITO E' CORRETTO?(S/N) \n";
$conferma=<STDIN>;
if ($conferma eq "n"){print"REINSERISCA IL NOME CORRETTO \n"}
else {print "inserisca il suo cognome\n"};

Praticamente funziona..il problema è che al programma non frega un gran che del fatto che io risponda S o N..tratta le risposte allo stesso modo..non so se dipende dal fatto che non riconosca le stringhe o dal fatto di aver sbagliato la sintassi dell'else..bo..
aiuto ragazzi !
Avatar utente
patrix966
Moderatore
 
Post: 2470
Iscritto il: 05/10/05 20:36
Località: Teramo

Sponsor
 

Postdi patrix966 » 19/12/05 12:27

Ciao ragazzi..allora?nessuno mi aiuta..?
Io sono ancora inchiovato qui su questo problema e non riesco ad andare avanti!
Avatar utente
patrix966
Moderatore
 
Post: 2470
Iscritto il: 05/10/05 20:36
Località: Teramo

Postdi pjfry » 19/12/05 12:32

io non conosco il perl, ma hai fatto un po' di debugging? tipo una print dopo <STDIN> per vedere che valori prende $conferma?
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Re: Problemi in PERL con il ciclo IF

Postdi Heba » 19/12/05 12:46

patrix966 ha scritto:
if ($conferma eq "n"){print"REINSERISCA IL NOME CORRETTO \n"}
else {print "inserisca il suo cognome\n"};



prova a mettere la N maiuscola dopo eq, forse non riconosce il no semplicemente perchè precedentemente hai messo S/N maiuscolo, quindi prende in considerazione la lettera inserita in maiuscolo, però non saprei esattamente
In internet il saper leggere equivale al saper ascoltare nella realtà.
Chi sa ascoltare possiede le chiavi di molte porte.
Heba
Utente Senior
 
Post: 509
Iscritto il: 16/06/05 15:09
Località: Cremona

Postdi patrix966 » 19/12/05 13:50

Ciao..grazie per le risposte..in fase di esho digitato sia n N che s S..ma niente per lui è sempre vera l'uguaglianza..adesso mi ci rimetto..devo capire perchè non va....
Avatar utente
patrix966
Moderatore
 
Post: 2470
Iscritto il: 05/10/05 20:36
Località: Teramo

Errore perl

Postdi infinito1971 » 19/12/05 15:26

Ciao patrix966,
penso che hai commesso un errore che non è inusuale neanche per chi programma in C... :lol:
L'errore che hai commesso è quello di aver usato l'operatore eq al posto di == (in C è come se avessi usato = al posto di ==) all'interno della funzione iF... la differenza è che uno è un operatore di ASSEGNAZIONE, mentre l'altro è di CONFRONTO... tutto qui! ;)

Un saluto,
infinito1971
Questo business è binario: o sei 1 o sei 0, vivo o morto, non esistono secondi classificati!
Avatar utente
infinito1971
Utente Senior
 
Post: 532
Iscritto il: 01/08/02 21:22
Località: Napoli

Postdi patrix966 » 19/12/05 15:52

Ciao..grazie per la risposta..proverò..però io inizialmente misi =..poi rileggendo vari manuali su internet trovai che per le stringhe veniva utilizzato eq..mentre = era solo per i numeri...comunque se mii confermi che è quello l'errore vado subito a vedere!
Grazie ;)
Avatar utente
patrix966
Moderatore
 
Post: 2470
Iscritto il: 05/10/05 20:36
Località: Teramo

Errore Perl

Postdi infinito1971 » 19/12/05 15:56

Bada che devi mettere == (due, non uno solo!)

Ciao,
infinito1971
Questo business è binario: o sei 1 o sei 0, vivo o morto, non esistono secondi classificati!
Avatar utente
infinito1971
Utente Senior
 
Post: 532
Iscritto il: 01/08/02 21:22
Località: Napoli

Errore Perl 2

Postdi infinito1971 » 19/12/05 16:02

Patrix guarda che non ho controllato se quanto ti ho detto funziona ma è stata la prima cosa che ho pensato... quindi bisogna testare quanto ti ho detto... comunque fammi sapere perchè nel caso non funzionasse cercherò un'alternativa... ;)

Saluti,
infinito1971
Questo business è binario: o sei 1 o sei 0, vivo o morto, non esistono secondi classificati!
Avatar utente
infinito1971
Utente Senior
 
Post: 532
Iscritto il: 01/08/02 21:22
Località: Napoli

Postdi infinito1971 » 19/12/05 16:11

Dato che mi hai messo nell'orecchio la pulce del dubbio, mi sono documentato ed ho visto che mi sbagliavo... :oops:
In Perl, effettivamente, l'operatore eq è un operatore di confronto e non di assegnazione come avevo erroneamente pensato; almeno ciò è quanto si legge qui.
Perciò mi viene il dubbio che l'errore sia nel fatto che la stringa non debba essere confrontata con "n" ma bensì con "n\n"... almeno penso...
Purtroppo adesso non ho modo di controllare quanto ti dico; allora, se puoi farla tu questa prova, fammi sapere...

Ciao,
infinito1971
Questo business è binario: o sei 1 o sei 0, vivo o morto, non esistono secondi classificati!
Avatar utente
infinito1971
Utente Senior
 
Post: 532
Iscritto il: 01/08/02 21:22
Località: Napoli

Postdi patrix966 » 19/12/05 16:19

Guarda ho utilizzato linguaggi semplici come qbasic e cobol e pascal..e questi problemi nel riconoscimenti di una stringa non gli ho mai avuti..non saprei..dovrei rifare un pò di prove..anche se ne ho già provate tante..ti informo ;)
grazie
Avatar utente
patrix966
Moderatore
 
Post: 2470
Iscritto il: 05/10/05 20:36
Località: Teramo

Postdi patrix966 » 19/12/05 23:36

Ciao..caro infinito invece ti confermo che avevi ragione!
Non mi spiego il perchè ma con == funziona..al contrario di quello che tutti i manuali dicono!
Adesso ho leggo male..oppure hanno sbagliato!
In ogni caso funzione!
Ciao e grazie di tutto!
Avatar utente
patrix966
Moderatore
 
Post: 2470
Iscritto il: 05/10/05 20:36
Località: Teramo

Postdi patrix966 » 19/12/05 23:50

Ragazzi perdonatemi!
Ho sbagliato ..non va!
Mi sembrava andasse perchè eseguivo sempre la risposta no!
Non avevo provato a mettere si!ed è sempre quello!
Sia che io inserisca 's'..sia che inserisco 'n' per lui è sempre uguale..ma cavolo ci sarà una soluzione!
Aiuto!
Avatar utente
patrix966
Moderatore
 
Post: 2470
Iscritto il: 05/10/05 20:36
Località: Teramo

Postdi pjfry » 19/12/05 23:55

se invece delle doppie virgolette metti la N tra apici?
Codice: Seleziona tutto
if ($conferma eq 'n'){print"REINSERISCA IL NOME CORRETTO \n"}
else {print "inserisca il suo cognome\n"};

continuo a non sapere come funziona il perl :roll: ma se lo STDIN ritorna un char e funziona come altri linguaggi... :undecided:
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Postdi patrix966 » 20/12/05 00:02

già fatto..niente di niente..mamma ragazzi che rabbia...cavolo è un semplice if con una semplice stringa..cosa c'è di complicato????? :evil:
Avatar utente
patrix966
Moderatore
 
Post: 2470
Iscritto il: 05/10/05 20:36
Località: Teramo

Postdi patrix966 » 20/12/05 00:18

RAGAZZI LEGGETE QUESTO

Operatori di confronto tra stringhe
Gli operatori di confronto tra stringhe sono equivalenti a quelli impiegati per i valori numerici, con l'unica differenza che al posto dei normali operatori di confronto simbolici, utilizzati per i valori numerici, useremo i seguenti:
minore lt
minore o uguale le
uguale eq
diverso ne
maggiore gt
maggiore o uguale ge
Facciamo un esempio:
$a=franco;
$b=bollo;
$c=$a . $b;
$a lt $b
# espressione falsa
$a le $b
# espressione falsa
$a == $b
# errore di sintassi
$a eq $b
# espressione falsa
$a gt $b
# espressione vera
$a gl $b
# espressione vera
$c eq "francobollo"
# espressione vera
Vero e falso
Per quanto riguarda il discorso sulle stringhe, si considerano false la stringhe nulle ed ovviamente vere la stringhe non nulle, come le più normali e semplici logiche di pensiero, anche per il Perl si considera vero tutto ciò che è vero e falso ciò che non appare vero, si considera falsa anche la stringa '0', attenzione però a non confondere con '00' che viene considerata vera come una sequenza di due caratteri 0.
In sostanza il Perl non ha valori booleani (vero o falso), ma solo stringhe nulle, stringhe "0", e il numero 0 vengono valutati false tutto il resto risulta vero.

Leggo male o dice che le uniche espressioni false sono lo 0!
Quindi che dovrei fare?fare inserire all'utente lo zero quando sbaglia ad inserire il nome?ASSURDO! :eeh:
Avatar utente
patrix966
Moderatore
 
Post: 2470
Iscritto il: 05/10/05 20:36
Località: Teramo

Postdi pjfry » 20/12/05 00:34

patrix966 ha scritto:Facciamo un esempio:
$a=franco;
$b=bollo;
$c=$a . $b;
$a lt $b
# espressione falsa
$a le $b
# espressione falsa
$a == $b
# errore di sintassi
$a eq $b
# espressione falsa
$a gt $b
# espressione vera
$a gl $b
# espressione vera
$c eq "francobollo"
# espressione vera

l'ultima non è proprio quella che servirebbe a te? :undecided:
hai provato a capire cosa ti restituisce lo STDIN? magari è lì il problema :undecided:
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Postdi patrix966 » 20/12/05 00:43

Ho già provato a vedere cosa mi restituisce..e il valore è quello che inserisco..in quel caso però lui riconosce con l'uguaglianza un valore al quale sono stati assegnati altri due valori riconosciuti come 2 stringhe..e non una stringa senza alcun valore assegnato!non so se mi sono spiegato!
Forse dovrei assegnare alla "s" un valore ($A) e a "n"un altro valore($B)..e poi fare l uguaglianza tra il valore inserito($conferma e ed il valore restituito in STDIN!

Certo Grande PJ è questo il trucco!!! SPERO!!

Anche se resterebbe il fatto che sarebbe una stupidagine..che dovrei fare assegnare ad ogni cosa un valore..gli altri linguaggi riconoscono senza alcun problema una stringa tra le virgolette...boti faccio sapere!!! ;)
Avatar utente
patrix966
Moderatore
 
Post: 2470
Iscritto il: 05/10/05 20:36
Località: Teramo

Postdi patrix966 » 20/12/05 01:12

La cosa sembrava illuminante..ma niente :evil:
ho provato così

print "INSERISCA IL SUO NOME \n";
$nome=<STDIN>;
print" \n";
print "LA PREGHIAMO DI CONFERMARE IL SUO NOME \n";
print " \n";
print"IL NOME INSERITO E CORRETTO?(s/n) \n ";
$conferma=<STDIN>;
print " \n";
$a='s';
$b='n';
if ($conferma eq "n"){print"REINSERISCA IL NOME CORRETTO \n"}
$conferma1=<STDIN>;
print "INSERISCA IL SUO COGNOME \n";
$cognome=<STDIN>;
print"\n";
print "LA PREGHIAMO DI CONFERMARE IL SUO COGNOME \n";
print "IL COGNOME INSERITO E' CORRETTO (s/n) \n";
$conferma1=<STDIN>;
if ($conferma1 eq "n"){print "reinserisca il cognome corretto \n"}
$conferma2=<STDIN>;

Praticamente ho fatto come dice lì..ho assegnato dei valori ad s ed n!
Adesso se metto i doppi apici..il risultato è lo stesso..anzi..adesso per lui la condizione è sempre positiva..cioè non chiede di reinserire il nome..mentre se tolgo gli apici..mi da errore ..
Ragazzi perdo le speranze

ah grazie per l'impegno PJ ;)
Avatar utente
patrix966
Moderatore
 
Post: 2470
Iscritto il: 05/10/05 20:36
Località: Teramo

Postdi pjfry » 20/12/05 09:25

ma se metti dei valori (ammessi che sia la strada giusta) dovrai fare il test con $a e $b no? così non è cambiato nulla sennò :undecided:
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Prossimo

Torna a Programmazione


Topic correlati a "Problemi in PERL con il ciclo IF":


Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti