|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 300
|
problema con c
Ho fatto il seguente programma usando Dev c++ solo che non mi funziona e non capisco perchè...
#include <stdio.h> int main (void) { int x,y,somma,differenza; char option; printf("inserisci il primo numero"); scanf("%d",&x); printf("inserisci il secondo numero"); scanf("%d",&y); printf("digita s per sommare i numeri oppure d per fare la differenza"); scanf("%c",&option); if (option=='s') { somma=x+y; printf("la somma è %d",somma); } else { differenza=x-y; printf("la differenza è %d",differenza); } scanf(" "); return 0; } lo compila senza errori ma non funziona |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
errore: if (option=='s') |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 300
|
mi dici anche come correggere? cosa c'è che non va? io arrivo da java e sto facendo fatica con la grammatica di c...
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: Torino... ma Abruzzo rulez!
Messaggi: 613
|
Quote:
va benissimo
__________________
Case AT big tower - Mobo XXX - amd 486DX2@66Mhz - 8 MB edo-ram - Trident SVGA 2MB - HDD 270MB Conner - CD-ROM Hitachi 4X "Muletto": DFI Lanparty LT X38@X48 T2R - e8400@3870 1.2xV - 4GB black dragon @ 1147 - 2x320 Barracuda 0Raided - from 8800GT Club3d |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: Torino... ma Abruzzo rulez!
Messaggi: 613
|
Quote:
l'errore sta nelle scanf... quando la seconda scanf acquisisce il secondo numero nel buffer di tastiera rimane il carattere '\n' dato dall'invio che viene pescato poi dalla terza scanf per il carattere: ergo option sarà sempre il carattere '\n' Per correggere basta sostituire questo: Codice:
scanf("%d%*c",&y);
Prova.
__________________
Case AT big tower - Mobo XXX - amd 486DX2@66Mhz - 8 MB edo-ram - Trident SVGA 2MB - HDD 270MB Conner - CD-ROM Hitachi 4X "Muletto": DFI Lanparty LT X38@X48 T2R - e8400@3870 1.2xV - 4GB black dragon @ 1147 - 2x320 Barracuda 0Raided - from 8800GT Club3d |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
Ho dato un'occhio veloce al code. Mi sembrava la comparazione di char option=="stringa" con "stringa" in cui si usa (stringa==0). Invece ora che rileggo è il carattere 's'... Cmq è un carattere equivalente a stringa quindi devi acquisire una Stringa con %s La soluzione eccola: Codice:
scanf("%s",&option);
Ultima modifica di okay : 28-09-2006 alle 08:21. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 300
|
scanf("%s",&option);
perfetto adesso funziona! grazie 1000 nn ci sarei mai arrivato!!! |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: Torino... ma Abruzzo rulez!
Messaggi: 613
|
Quote:
rpippo\n e vedi cosa succede. Ripeto funziona ma è molto sensibile a bug da tastiera. P.S. rivedendo la scanf ci sarebbe un altro errore: con le stringhe non si può operare il reference &. Codice:
scanf("%s",option);
__________________
Case AT big tower - Mobo XXX - amd 486DX2@66Mhz - 8 MB edo-ram - Trident SVGA 2MB - HDD 270MB Conner - CD-ROM Hitachi 4X "Muletto": DFI Lanparty LT X38@X48 T2R - e8400@3870 1.2xV - 4GB black dragon @ 1147 - 2x320 Barracuda 0Raided - from 8800GT Club3d Ultima modifica di Paco De Luciaaaaa : 28-09-2006 alle 10:57. |
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Nov 2005
Città: Mantova
Messaggi: 115
|
Fai così:
#include <stdio.h> int main () { int x,y,somma,differenza; char option; printf("Inserisci il primo numero:"); scanf("%d",&x); while(getchar()!='\n'); printf("\nInserisci il secondo numero:"); scanf("%d",&y); while(getchar()!='\n'); printf("\nDigita s per sommare i numeri, oppure d per fare la differenza:"); scanf("%c",&option); while(getchar()!='\n'); if (option=='s') { somma=x+y; printf("\nLa somma e' %d",somma); } else { differenza=x-y; printf("\nLa differenza e' %d",differenza); } getchar(); return 0; } (devo ancora capire come si può indentare il codice in sto forum...) P.S.: Non usare mai nomi come x o y per questo tipo di varaibili Saluti Ultima modifica di Gino+89+ : 28-09-2006 alle 15:17. |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: Torino... ma Abruzzo rulez!
Messaggi: 613
|
Quote:
Ripeto basta usare l'operatore "*" nelle scanf...
__________________
Case AT big tower - Mobo XXX - amd 486DX2@66Mhz - 8 MB edo-ram - Trident SVGA 2MB - HDD 270MB Conner - CD-ROM Hitachi 4X "Muletto": DFI Lanparty LT X38@X48 T2R - e8400@3870 1.2xV - 4GB black dragon @ 1147 - 2x320 Barracuda 0Raided - from 8800GT Club3d |
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Nov 2005
Città: Mantova
Messaggi: 115
|
Più che ottimizzazione del codice sono scelte di stile da parte del programmatore...comunque si, e potevo pure (e forse era meglio) definire option come int per risparmiare 3 byte
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: Torino... ma Abruzzo rulez!
Messaggi: 613
|
Quote:
Mi sa che devi rivederti i tipi in c... cmq va bene così. Fidati nn cambiare.
__________________
Case AT big tower - Mobo XXX - amd 486DX2@66Mhz - 8 MB edo-ram - Trident SVGA 2MB - HDD 270MB Conner - CD-ROM Hitachi 4X "Muletto": DFI Lanparty LT X38@X48 T2R - e8400@3870 1.2xV - 4GB black dragon @ 1147 - 2x320 Barracuda 0Raided - from 8800GT Club3d |
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Nov 2005
Città: Mantova
Messaggi: 115
|
Opsss è verpo 1 byte char e 4 byte int
...Errore di distrazione infedeli Ultima modifica di Gino+89+ : 28-09-2006 alle 23:02. |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:46.











...Errore di distrazione infedeli








