Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
La tecnologia SQD-Mini LED di TCL arriva sul taglio da 65 pollici con la serie C8L: 2040 zone, pannello WHVA 2.0 e un picco che alle rilevazioni delle sonde tocca i 4400 nit nel profilo Filmmaker e un HDR quasi perfetto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-09-2006, 22:01   #1
Nhio
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
Nhio è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2006, 22:11   #2
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Nhio
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

errore:
if (option=='s')
okay è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2006, 22:36   #3
Nhio
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...
Nhio è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 01:07   #4
Paco De Luciaaaaa
Senior Member
 
L'Avatar di Paco De Luciaaaaa
 
Iscritto dal: Mar 2005
Città: Torino... ma Abruzzo rulez!
Messaggi: 613
Quote:
Originariamente inviato da okay
errore:
if (option=='s')
scusa ma ne sei certo?

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 to 5850 Sapphire
Paco De Luciaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 01:10   #5
Paco De Luciaaaaa
Senior Member
 
L'Avatar di Paco De Luciaaaaa
 
Iscritto dal: Mar 2005
Città: Torino... ma Abruzzo rulez!
Messaggi: 613
Quote:
Originariamente inviato da Nhio
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

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);
che forza l'acquisizione del carattere '\n'.

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 to 5850 Sapphire
Paco De Luciaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 02:22   #6
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Paco De Luciaaaaa
scusa ma ne sei certo?

va benissimo
scusa ma data l'ora... ho il cervello un pò bruciato...

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 07:21.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 08:04   #7
Nhio
Senior Member
 
Iscritto dal: Jul 2005
Messaggi: 300
scanf("%s",&option);


perfetto adesso funziona!


grazie 1000 nn ci sarei mai arrivato!!!
Nhio è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 09:55   #8
Paco De Luciaaaaa
Senior Member
 
L'Avatar di Paco De Luciaaaaa
 
Iscritto dal: Mar 2005
Città: Torino... ma Abruzzo rulez!
Messaggi: 613
Quote:
Originariamente inviato da okay
scusa ma data l'ora... ho il cervello un pò bruciato...

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);
Sintatticamente è corretta ma non per come ha dichiarato option: ricorda che c'è una bella differenza tra un char e una stringa. il %s in quel caso funzionerebbe solo se da tastiera si immette un carattere+INVIO... prova a scrivere a run time
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);
[/quote]
__________________
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 to 5850 Sapphire

Ultima modifica di Paco De Luciaaaaa : 28-09-2006 alle 09:57.
Paco De Luciaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 14:14   #9
Gino+89+
Member
 
L'Avatar di Gino+89+
 
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 14:17.
Gino+89+ è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 14:26   #10
Paco De Luciaaaaa
Senior Member
 
L'Avatar di Paco De Luciaaaaa
 
Iscritto dal: Mar 2005
Città: Torino... ma Abruzzo rulez!
Messaggi: 613
Quote:
Originariamente inviato da Gino+89+
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
Corretto ma non ottimizzato perchè inutilmente usi un while e una chiamata alla procedura getchar quando puoi fare la stessa cosa nella scanf...

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 to 5850 Sapphire
Paco De Luciaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 20:11   #11
Gino+89+
Member
 
L'Avatar di Gino+89+
 
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
Gino+89+ è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 21:35   #12
Paco De Luciaaaaa
Senior Member
 
L'Avatar di Paco De Luciaaaaa
 
Iscritto dal: Mar 2005
Città: Torino... ma Abruzzo rulez!
Messaggi: 613
Quote:
Originariamente inviato da Gino+89+
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
Stai dicendo che un char occupa 4 byte?

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 to 5850 Sapphire
Paco De Luciaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 22:00   #13
Gino+89+
Member
 
L'Avatar di Gino+89+
 
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 22:02.
Gino+89+ è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2006, 14:16   #14
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da Nhio
scanf("%s",&option);
Si, come no. Metti qualche carattere extra e ti becchi un bel SEGMENTATION FAULT.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Scopa elettrica Proscenic P11 Ultra+ a 8...
Napoli capitale italiana del calcolo qua...
Emma avrebbe dovuto contribuire alla sov...
Tesco abbandonerà VMware e migrer...
Driver AMD rotti su Windows 10? Rilascia...
Il salto quantistico del 2025 di Microso...
Licenziato da Google per aver reso Works...
Prime Day Action Cam, DJI e Insta360 si ...
La rete delle PMI non può pi&ugra...
Windows 11 compie 5 anni: dai requisiti ...
ShiftCam lancia la nuova gamma LensUltra...
Meta rilancia Facebook Creator Studio co...
Prime Day Amazon, tutti gli sconti sui d...
God of War Laufey: Jason Schreier fornis...
Una nuova campagna di truffe su WhatsApp...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:03.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v