PDA

View Full Version : problema con c


Nhio
27-09-2006, 23:01
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

okay
27-09-2006, 23:11
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')

Nhio
27-09-2006, 23:36
mi dici anche come correggere? cosa c'è che non va? io arrivo da java e sto facendo fatica con la grammatica di c...

Paco De Luciaaaaa
28-09-2006, 02:07
errore:
if (option=='s')

scusa ma ne sei certo? ;)

va benissimo

Paco De Luciaaaaa
28-09-2006, 02:10
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:
scanf("%d%*c",&y);
che forza l'acquisizione del carattere '\n'.

Prova. ;)

okay
28-09-2006, 03:22
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:

scanf("%s",&option);

Nhio
28-09-2006, 09:04
scanf("%s",&option);


perfetto adesso funziona!


grazie 1000 nn ci sarei mai arrivato!!!

Paco De Luciaaaaa
28-09-2006, 10:55
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:

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 &.

scanf("%s",option);
[/QUOTE]

Gino+89+
28-09-2006, 15:14
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

Paco De Luciaaaaa
28-09-2006, 15:26
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... ;)

Gino+89+
28-09-2006, 21:11
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 :D

Paco De Luciaaaaa
28-09-2006, 22:35
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 :D

Stai dicendo che un char occupa 4 byte? :ciapet:

Mi sa che devi rivederti i tipi in c... cmq va bene così. Fidati nn cambiare. :Prrr:

Gino+89+
28-09-2006, 23:00
Opsss è verpo 1 byte char e 4 byte int :doh: ...Errore di distrazione infedeli :oink:

DanieleC88
29-09-2006, 15:16
scanf("%s",&option);
Si, come no. Metti qualche carattere extra e ti becchi un bel SEGMENTATION FAULT. :Prrr: