Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Star Wars Zero Company è l'erede di XCOM 2
Star Wars Zero Company è l'erede di XCOM 2
Bit Reactor porta nell’universo di Star Wars una struttura tattica che richiama apertamente XCOM 2, ma la arricchisce con legami tra i personaggi, progressione ruolistica, gestione della base e un sistema di combattimento costruito attorno a tre Punti Azione e alle risorse condivise della squadra
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
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


Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Raggi gamma anomali dalla Via Lattea sve...
NIO vende il 30% della divisione scambio...
Sony brevetta un DualSense capace di acc...
Un volto per l'assistenza IA: cosa pu&og...
NVIDIA autorizza un buyback da 150 milia...
Come il T-1000 di Terminator 2: circuiti...
Cloudflare: risolto il bug di memoria ch...
Lunex spegne gli antivirus con un driver...
Pannelli solari efficienti oltre il limi...
Qualcomm conferma la collaborazione con ...
OnePlus 16 arriverà il prossimo m...
Dallo scroll condiviso ai quiz con Gemin...
Gli agenti AI stanno superando i limiti:...
Con SAS Viya, gli agenti IA passano dall...
OpenAI prepara 'o', un assistente sempre...
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:16.


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