View Full Version : Scelta =='S' fai questo else fai quest'altro
E' pochissimo che sto imparando il linguaggio C.
Non riesco a fare una cosa dei questo tipo:
Voglio scrivere un programma che mi permetta di sceglere se continuare o uscire dallo stesso.
Il prog mi chiederà "Vuoi uscire dal programma? Scegli S / N"
quindi io digito per esempio S
allora se la scelta è S vai a inizio, altrimenti vai a fine.
Con i numei ci riesco mentre con le lettere niente da fare.
Cioè:
#include <stdio.h>
main ()
{
int scelta;
inizio:
printf("\n Vuoi uscire? 1 = si 2 = no La tua scelta e'= ");
scanf("%d", &scelta);
if (scelta ==1) {goto fine;}
else {goto inizio;}
fine:
printf("\n Ciao ciao");
return 0;
}
Vorrei fare la stessa cosa ma con le lettere tipo: if (scelta=='S') lo devo fare con getchar() c'ho provato ma non va. Sarà un cazzata ma non riesco sono un po' confuso.
Qualcuno che mi illumina?
Thx
Fenomeno85
23-06-2005, 15:38
sacrilegio che vedo :eekk: cosè quel goto :eekk: ma dove stai studiando?? su un libro anti-programmazione?? :eekk:
~§~ Sempre E Solo Lei ~§~
pipozzolo
23-06-2005, 16:22
E' pochissimo che sto imparando il linguaggio C.
Non riesco a fare una cosa dei questo tipo:
Voglio scrivere un programma che mi permetta di sceglere se continuare o uscire dallo stesso.
Il prog mi chiederà "Vuoi uscire dal programma? Scegli S / N"
quindi io digito per esempio S
allora se la scelta è S vai a inizio, altrimenti vai a fine.
Con i numei ci riesco mentre con le lettere niente da fare.
Cioè:
#include <stdio.h>
main ()
{
int scelta;
inizio:
printf("\n Vuoi uscire? 1 = si 2 = no La tua scelta e'= ");
scanf("%c", &scelta);
if (scelta ==1) {goto fine;}
else {goto inizio;}
fine:
printf("\n Ciao ciao");
return 0;
}
Vorrei fare la stessa cosa ma con le lettere tipo: if (scelta=='S') lo devo fare con getchar() c'ho provato ma non va. Sarà un cazzata ma non riesco sono un po' confuso.
Qualcuno che mi illumina?
Thx
Inguardabile... mai usare i goto!
Prova con un ciclo do while:
#include <stdio.h>
main ()
{
char scelta;
do {
printf("\n Vuoi uscire? s = si n = no La tua scelta e'= ");
scanf("%c", &scelta);
} while(scelta != 's' && scelta != 'S');
printf("\n Ciao ciao");
return 0;
}
Vuoi imparare a programmare o magari diventare programmatore........
Dimentica i goto, o dimentica la programmazione!!!
E' pochissimo che sto imparando il linguaggio C.
Non riesco a fare una cosa dei questo tipo:
Voglio scrivere un programma che mi permetta di sceglere se continuare o uscire dallo stesso.
Il prog mi chiederà "Vuoi uscire dal programma? Scegli S / N"
quindi io digito per esempio S
allora se la scelta è S vai a inizio, altrimenti vai a fine.
Con i numei ci riesco mentre con le lettere niente da fare.
Cioè:
#include <stdio.h>
main ()
{
int scelta;
inizio:
printf("\n Vuoi uscire? 1 = si 2 = no La tua scelta e'= ");
scanf("%d", &scelta);
if (scelta ==1) {goto fine;}
else {goto inizio;}
fine:
printf("\n Ciao ciao");
return 0;
}
Vorrei fare la stessa cosa ma con le lettere tipo: if (scelta=='S') lo devo fare con getchar() c'ho provato ma non va. Sarà un cazzata ma non riesco sono un po' confuso.
Qualcuno che mi illumina?
Thx
un GOTO!! :eekk: ....svengo.....
cmq scherzi a parte scordati il goto...fai finta che non esista proprio
E io che mi stavo incazzando perchè il mio libro di C non faceva neanche un accenno al Goto! :D :D
ps. ma Goto non è basic? :stordita:
Domanda forse scema: ma perchè alla fine c'è un return 0? Non mi sembra ci sia una funzione... :confused:
franksisca
23-06-2005, 17:14
Come credo tu abbia potuto intuire, il goto non è molto bello.
Comunque ti dò u n consiglio, sperando di non essere sparato a vista, prova con java, è più semplice ed è anche più comune, e trovi anche molti manuali free.
Tanto, da quello che ho visto, senza offesa, sei n'terra c'à programmazione.
CIAO
prova con java, è più semplice ed è anche più comune
Pensavo il C fosse il linguaggio di gran lunga più comune.
Ma magari mi sbaglio io (oltre che essere un po' OT :p).
zakzakit
23-06-2005, 17:30
E io che mi stavo incazzando perchè il mio libro di C non faceva neanche un accenno al Goto! :D :D
ps. ma Goto non è basic? :stordita:
Domanda forse scema: ma perchè alla fine c'è un return 0? Non mi sembra ci sia una funzione... :confused:
Il goto è comune a tutti i linguaggi di alto livello degli anni '60, cobol fortran e basic. Se non ricordo male la programmazione strutturata è stata introdotta dall'algol.
Il goto può essere utile anche nei linguaggi strutturati, generalmente quando si verificano condizioni che impongono la fine immediata del programma.
Il return 0 restituisce un valore al sistema operativo.
Fenomeno85
23-06-2005, 17:50
Il goto è comune a tutti i linguaggi di alto livello degli anni '60, cobol fortran e basic. Se non ricordo male la programmazione strutturata è stata introdotta dall'algol.
Il goto può essere utile anche nei linguaggi strutturati, generalmente quando si verificano condizioni che impongono la fine immediata del programma.
Il return 0 restituisce un valore al sistema operativo.
goto deriva da linguaggi a basso livello assembly dove i salti vanno fatti in questo modo ;)
il goto NON va mai utilizzato in linguaggi ad alto livello :)
~§~ Sempre E Solo Lei ~§~
Fenomeno85
23-06-2005, 17:51
Come credo tu abbia potuto intuire, il goto non è molto bello.
Comunque ti dò u n consiglio, sperando di non essere sparato a vista, prova con java, è più semplice ed è anche più comune, e trovi anche molti manuali free.
Tanto, da quello che ho visto, senza offesa, sei n'terra c'à programmazione.
CIAO
ehm impara il c va che è meglio
~§~ Sempre E Solo Lei ~§~
zakzakit
23-06-2005, 18:02
goto deriva da linguaggi a basso livello assembly dove i salti vanno fatti in questo modo ;)
il goto NON va mai utilizzato in linguaggi ad alto livello :)
~§~ Sempre E Solo Lei ~§~
Se Ritchie ha messo un'istruzione goto nel C un motivo ce l'avrà avuto... :)
Se non ti fidi di me, fidati di Brian Kernighan:
"Horrors! goto's and labels
C has a goto statement and labels, so you can branch about the way you used to. But most of the time goto's aren't needed. (How many have we used up to this point?) The code can almost always be more clearly expressed by for/while, if/else, and compound statements.
One use of goto's with some legitimacy is in a program which contains a long loop, where a while would be too extended. Then you might write
mainloop:
...
goto mainloop;
Another use is to implement a break out of more than one level of for or while. goto's can only branch to labels within the same function."
Fenomeno85
23-06-2005, 18:09
Se Ritchie ha messo un'istruzione goto nel C un motivo ce l'avrà avuto... :)
Se non ti fidi di me, fidati di Brian Kernighan:
"Horrors! goto's and labels
C has a goto statement and labels, so you can branch about the way you used to. But most of the time goto's aren't needed. (How many have we used up to this point?) The code can almost always be more clearly expressed by for/while, if/else, and compound statements.
One use of goto's with some legitimacy is in a program which contains a long loop, where a while would be too extended. Then you might write
mainloop:
...
goto mainloop;
Another use is to implement a break out of more than one level of for or while. goto's can only branch to labels within the same function."
chiunque lavori e insegni in modo decente c / c++ l'istruzione GOTO ti dice di non utilizzarla. E cmq anche Braian dice che non si deve utilizzarlo tranne per i cicli dove ripeto per me sono alquanto inutili e il codice diventa molto schifoso
~§~ Sempre E Solo Lei ~§~
Il goto è comune a tutti i linguaggi di alto livello degli anni '60, cobol fortran e basic. Se non ricordo male la programmazione strutturata è stata introdotta dall'algol.
Il goto può essere utile anche nei linguaggi strutturati, generalmente quando si verificano condizioni che impongono la fine immediata del programma.
Il return 0 restituisce un valore al sistema operativo.
Grazie della spiegazione ;)
Fenomeno85
23-06-2005, 18:26
gente se il programma deve terminare si usano exit o return non goto ... se volete diventare almeno dei programmatori che sanno scrivere del codice usate una programmazione lineare
~§~ Sempre E Solo Lei ~§~
Il GOTO non va utilizzato perche' viola i principi della buona programmazione strutturata....tie' ...eccoti un articolo di Dijkstra --> Go To Statement Considered Harmful (http://www.acm.org/classics/oct95/)
Fenomeno85
23-06-2005, 18:52
Il GOTO non va utilizzato perche' viola i principi della buona programmazione strutturata....tie' ...eccoti un articolo di Dijkstra --> Go To Statement Considered Harmful (http://www.acm.org/classics/oct95/)
ma è quel Dijkstra dei percorsi mimini?? :D ... bhe dai già dal 68 era stato bandito il goto :asd:
~§~ Sempre E Solo Lei ~§~
Bravi, bravi, tutti bravissimi a criticare.
Prima di tutto sono 4 giorni che ho preso il manuale di C, il che la dice lunga sulla mia esperienza C cioè zero. Come ha detto qualcuno forse di Napoli (stong 'nterr' ca' programmzion') bell' Cumparie', pur' u nonn' mio s' n' foss' accort'.
Poi, io ho scritto solo un piccolo esempio, che oltre tutto funziona se compilato, quindi non mi perderei su ragionamenti "metafisici".
Ancora,ringrazio pipozzolo che mi ha fatto vedere come si fa.
Solo una cosa, quando digito N, oppure qualsiasi lettera diversa da s o S, mi stampa 2 volte la frase "vuoi uscire?.." Tanta polemica sull' eleganza del codice e dopo sull'output del programma, come definirlo, non elegante?, sorvoliamo? Mi sembra quanto meno ipocrita.
Un appunto ve lo voglio fare: forse non vi rendete conto che qui siete quasi tutti OT.
Non rompete l'anima sull'eleganza della scrittura del codice.
A vostro favore dico che ho letto effettivamente che al posto del goto è consigliabile utilizzaare un ciclo.
In assembler (linguaggio a basso livello) si usa "jump". Nel fortran 77 strutturato, l'ho sempre utilizzato (goto 100 continue).
Per rispondere a quelli che subito mi hanno consigliato di cambiare e imparare il java, rispondo che non si potrà mai essere bravi a programmare in java senza le basi del C, ma questo è un mio parere.
Grazie a tutti per la lezione.
Fenomeno85
24-06-2005, 13:30
dato che sono in vena polemica
Bravi, bravi, tutti bravissimi a criticare.
Prima di tutto sono 4 giorni che ho preso il manuale di C, il che la dice lunga sulla mia esperienza C cioè zero.
non c'entra che parti da zero mai visto un manuale serio che parte con i goto
Come ha detto qualcuno forse di Napoli (stong 'nterr' ca' programmzion') bell' Cumparie', pur' u nonn' mio s' n' foss' accort'.
traduci che non ci ho capito una mazza
Poi, io ho scritto solo un piccolo esempio, che oltre tutto funziona se compilato, quindi non mi perderei su ragionamenti "metafisici".
se un programma funziona non significa che è scritto bene... ragionamenti metafisici?? :mbe: una persona sa programmare solo se riesce a scrivere codice decente è questa la differenza tra programmatore e una persona che lo fa così tanto per dire so programmare.
Ancora,ringrazio pipozzolo che mi ha fatto vedere come si fa.
Solo una cosa, quando digito N, oppure qualsiasi lettera diversa da s o S, mi stampa 2 volte la frase "vuoi uscire?.." Tanta polemica sull' eleganza del codice e dopo sull'output del programma, come definirlo, non elegante?, sorvoliamo? Mi sembra quanto meno ipocrita.
codice sbagliato no magari??
Un appunto ve lo voglio fare: forse non vi rendete conto che qui siete quasi tutti OT.
Non rompete l'anima sull'eleganza della scrittura del codice.
A vostro favore dico che ho letto effettivamente che al posto del goto è consigliabile utilizzaare un ciclo.
se sappiamo programmare con un minimo di eleganza non è colpa nostra.
E cmq il GOTO nella programmazione lineare NON si usa.
In assembler (linguaggio a basso livello) si usa "jump". Nel fortran 77 strutturato, l'ho sempre utilizzato (goto 100 continue).
per la cronoca ogni assembly ha il suo set di istruzioni per i salti.
Per rispondere a quelli che subito mi hanno consigliato di cambiare e imparare il java, rispondo che non si potrà mai essere bravi a programmare in java senza le basi del C, ma questo è un mio parere.
forse per java ci vuole c++ non c dato che java è sotto classi e l'implementazioni di tali è solo sotto c++ e non su c.
~§~ Sempre E Solo Lei ~§~
Fenomeno85
24-06-2005, 13:40
cmq ti stampa due volte perchè in realtà quando vai con la lettera premi anche invio che rimane nel buffer e quindi ricicla due volte.
soluzione :
#include <stdio.h>
#include <windows.h>
#include <conio.h>
int main (){
char scelta;
do {
printf("\n Vuoi uscire? s = si n = no \nLa tua scelta e'= ");
fflush (stdin);
scanf ("%c", &scelta);
} while(scelta != 's' && scelta != 'S');
printf("\n Ciao ciao");
system ("PAUSE");
return 0;
}
~§~ Sempre E Solo Lei ~§~
IspiCiosa
24-06-2005, 13:49
Per favore nn Usate in C il Goto!!!!!!!! :cry:
poi nn capisco perche usarlo quando basta un semplicissimo ciclo do while?
alla fine ce return 0 perche il main stesso ke è il corpo del programma viene visto come una funzione.........
ciao
ma è quel Dijkstra dei percorsi mimini?? :D ... bhe dai già dal 68 era stato bandito il goto :asd:
~§~ Sempre E Solo Lei ~§~
esattamente ;)
pero' e' piu' bello "cammini minimi"... percorsi minimi mi suona male :)
Bravi, bravi, tutti bravissimi a criticare.
Guarda che qui nessuno ti ha criticato..semplicemente ti e' stato detto che per una buona programmazione strutturata e lineare devi dimenticarti il goto.
Io inoltre ti ho anche indicato nel mio secondo post un bell'articolo di Dijkstra che spiega le ragioni del perche' il GOTO sia cosi' orribile....
Fenomeno85
24-06-2005, 16:03
esattamente ;)
pero' e' piu' bello "cammini minimi"... percorsi minimi mi suona male :)
studiato in 5 era anche bellino come procedimento :D
~§~ Sempre E Solo Lei ~§~
pipozzolo
28-06-2005, 10:38
cmq ti stampa due volte perchè in realtà quando vai con la lettera premi anche invio che rimane nel buffer e quindi ricicla due volte.
soluzione :
#include <stdio.h>
#include <windows.h>
#include <conio.h>
int main (){
char scelta;
do {
printf("\n Vuoi uscire? s = si n = no \nLa tua scelta e'= ");
fflush (stdin);
scanf ("%c", &scelta);
} while(scelta != 's' && scelta != 'S');
printf("\n Ciao ciao");
system ("PAUSE");
return 0;
}
~§~ Sempre E Solo Lei ~§~
E' vero, è un effetto collaterale della scanf con i caratteri... forse è meglio la getchar()?
Dopo 5 anni di java e C# figurati se mi ricordo di svuotare il buffer :stordita:
Solo una cosa, quando digito N, oppure qualsiasi lettera diversa da s o S, mi stampa 2 volte la frase "vuoi uscire?.." Tanta polemica sull' eleganza del codice e dopo sull'output del programma, come definirlo, non elegante?, sorvoliamo? Mi sembra quanto meno ipocrita.
questo te lo potevi risparmiare... non ho mai dato la garanzia di scrivere
codice esatto senza test nemmeno ai miei datori di lavoro, figurati a te...
Ti posso solo suggerire una cosa, benchè i commenti a volte siano stati un pò esagerati, incassa e fanne tesoro, non prendertela. Hanno ragione.
io programmo spesso in fortran 90 (niente di serio, non mi definirei nemmeno lontanamente un "programmatore")
ho letto l'articolo di Dijkstra e, a parte il fatto che scrive in modo veramente fantastico (mi ricorda lontanamente la chiarezza logica di B.Russel), non riesco a trovarci motivazioni (al di là della maggiore confusione nel programma, secondo me nemmeno troppa...) realmente giustificanti il vostro orrore nel vedere un "goto" in un codice.
qualcuno può spiegarmi tale avversione, evidentemente ben fondata, se comune a tanti programmatori?
grazie mille
Zandor: non dico che tu non debba mai usare il goto, ma che proprio ora che sei all'inzio il goto non deve essere la soluzione per ogni ciclo (come hai fatto te)...
Diciamo che da quando programmo in C (15 anni se non sbaglio) mi è capitato di dover usare il goto 1 o 2 volte...e questo per evitare di usare troppi while annidati...
Il goto è orrendo in C e non è questine di stile...ma di logica... Il goto porta alla creazione di programmi confusionari e illeggibili...ed è per questo che non va usato...
Se vuoi imparare il C impara ad usare i cicli alla perfezione...e scordati il goto...
Quando sarai alla ricerca di una soluzione non ti dovrà venire in mente: "Ah qui ci metto un bel goto"...ma il goto dovrà essere l'ultima delle soluzioni che puoi usare... Anzi ti dirò, prima trova una soluzione senza goto...se la soluzione senza goto è scomoda (ed il 99,9% delle volte non lo sarà) allora potrai metterlo...
Fenomeno85
19-07-2005, 11:32
Zandor: non dico che tu non debba mai usare il goto, ma che proprio ora che sei all'inzio il goto non deve essere la soluzione per ogni ciclo (come hai fatto te)...
Diciamo che da quando programmo in C (15 anni se non sbaglio) mi è capitato di dover usare il goto 1 o 2 volte...e questo per evitare di usare troppi while annidati...
Il goto è orrendo in C e non è questine di stile...ma di logica... Il goto porta alla creazione di programmi confusionari e illeggibili...ed è per questo che non va usato...
Se vuoi imparare il C impara ad usare i cicli alla perfezione...e scordati il goto...
Quando sarai alla ricerca di una soluzione non ti dovrà venire in mente: "Ah qui ci metto un bel goto"...ma il goto dovrà essere l'ultima delle soluzioni che puoi usare... Anzi ti dirò, prima trova una soluzione senza goto...se la soluzione senza goto è scomoda (ed il 99,9% delle volte non lo sarà) allora potrai metterlo...
scusa cionci ma non riesco a immaginare un problema che sia risolvibile solo con goto o sbaglio?
~§~ Sempre E Solo Lei ~§~
scusa cionci ma non riesco a immaginare un problema che sia risolvibile solo con goto o sbaglio?
~§~ Sempre E Solo Lei ~§~
Non sbagli...oltre al goto serve anche un ciclo...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.