PDA

View Full Version : [C] if con stringa char


Giangiui
17-12-2011, 13:51
Salve, io devo fare questo esercizio senza ricorrere a procedure :
"Scrivere un programma che simuli un salvadanaio. L'utente puo' inserire e prelevare soldi. Visualizzare salvadanaio vuoto se non ci sono soldi. Il numero di operazioni di inserimento e prelievo sono decise dall'utente."

Io ho sviluppato questo codice, ma mi da vari errori, cos'è che non va ?

#include <stdio.h>
#include <stdlib.h>

int main () {
char scelta;
int totale,i,prelievo,deposito,operazioni;
printf ("quante operazioni vuoi fare");
scanf ("%d", &operazioni);
printf ("quant'e' il totale?");
scanf ("%d",&totale);
for (i=0;i<operazioni;i++) {
printf ("%d",i);
printf ("cosa vuoi fare?");
scanf ("%c",&scelta);
fflush (stdin);
if (scelta == "prelievo") {
printf ("quanto vuoi prelevare");
scanf ("%d",&prelievo);
totale = totale - prelievo;
}
if (scelta == "deposito") {
printf ("quanto vuoi depositare");
scanf ("%d",&deposito);
}}
printf ("%d",totale);
system ("Pause");
}

Non ho messo l'if per il salvadanaio vuoto :S

WarDuck
17-12-2011, 17:08
Premesso che è meglio usare i tag CODE e indentare un po' il codice:

#include <stdio.h>
#include <stdlib.h>

int main () {
char scelta;
int totale,i,prelievo,deposito,operazioni;
printf ("quante operazioni vuoi fare");
scanf ("%d", &operazioni);
printf ("quant'e' il totale?");
scanf ("%d",&totale);

for (i=0;i<operazioni;i++) {
printf ("%d",i);
printf ("cosa vuoi fare?");
scanf ("%c",&scelta);
fflush (stdin);
if (scelta == "prelievo") {
printf ("quanto vuoi prelevare");
scanf ("%d",&prelievo);
totale = totale - prelievo;
}

if (scelta == "deposito") {
printf ("quanto vuoi depositare");
scanf ("%d",&deposito);
}
}
printf ("%d",totale);
system ("Pause");
}

1) scelta non è una stringa, è un carattere singolo. Una stringa è un array di caratteri.

2) il confronto tra stringhe non si fa con l'operatore ==, ma con la funzione strcmp.

Giangiui
18-12-2011, 08:59
1) hai ragione, me n'ero dimenticato :muro:
2) cavolo, strcmp ! :O e come si implementa in questo caso?

tecno789
18-12-2011, 09:24
1) hai ragione, me n'ero dimenticato :muro:
2) cavolo, strcmp ! :O e come si implementa in questo caso?

nel tuo caso, non puoi confrontare una stringa con un carattere.

Puoi al massimo inizializzare "scelta" come stringa e fare una sottospecie di menu, a quel punto fai:

if(strcmp(scelta,deposito)==0)


ps: ricordati di inserire la libreria : #include <string.h>

Giangiui
18-12-2011, 10:27
nel tuo caso, non puoi confrontare una stringa con un carattere.

Puoi al massimo inizializzare "scelta" come stringa e fare una sottospecie di menu, a quel punto fai:

if(strcmp(scelta,deposito)==0)


ps: ricordati di inserire la libreria : #include <string.h>

grazie dell'aiuto, ora provo :)

tecno789
18-12-2011, 10:36
grazie dell'aiuto, ora provo :)

se ti posso dare una mano, io l'ho fatto così :

#include <stdio.h>
#include <stdlib.h>
#define N 8


void menu();
int main () {
char scelta[N];
char prelievo[N]="prelievo";
char deposito[N]="deposito";
int totale,i,operazioni,pre,dep;
printf ("quante operazioni vuoi fare");
scanf ("%d", &operazioni);
printf ("quant'e' il totale?");
scanf ("%d",&totale);

for (i=0;i<operazioni;i++) {
printf ("%d",i);
printf ("cosa vuoi fare?");
menu();
scanf ("%s",scelta);
fflush (stdin);
if (strcmp(scelta,prelievo)==0)
{
if(totale==0){
printf("Non c'e' niente da prelevare \n");
break;
}
printf ("quanto vuoi prelevare");
scanf ("%d",&pre);
totale = totale - pre;
}

if (strcmp(scelta,deposito)==0) {
printf ("quanto vuoi depositare");
scanf ("%d",&dep);
totale = totale + dep;
}
}
printf ("%d \n",totale);
system ("Pause");
return 0;
}

void menu()
{
printf("\nScrivere prelievo(per prelevare) o deposito(per depositare) \n");
}


ovviamente esistono modi migliori e molto meglio ottimizzati, a partire dallo switch-case che in questo caso ti avrebbe aiutato parecchio!