Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-09-2006, 23: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, 23: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, 23: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, 02: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, 02: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, 03: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 08:21.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 09: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, 10: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 10:57.
Paco De Luciaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 15: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 15:17.
Gino+89+ è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 15: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, 21: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, 22: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, 23: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 23:02.
Gino+89+ è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2006, 15: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


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Le tute spaziali AxEMU di Axiom Space pe...
Dongfeng sfida la NATO: navi dalla Cina ...
5G Standalone per il mondo marittimo: Er...
Nova Lake-S: configurazioni fino a 52 co...
Baxi presenta la pompa di calore Alya E ...
PC ASUS e Acer vietati in Germania: il t...
Stellantis rilancia il diesel in Europa:...
Truffa per utenti Trezor e Ledger: lette...
Wi-Fi 7 conveniente: FRITZ! lancia 4630,...
La Formula 1 dei robot tagliaerba miglio...
Il nuovo gioco del creatore di God of Wa...
Grok arriva sulle Tesla in Europa: l'int...
Assassin's Creed IV: Black Flag Remake p...
Il padre di God of War attacca Sons...
È operativo il primo computer qua...
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: 04:46.


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