Problema programma in C

JoyGeneration

Utente Attivo
157
6
CPU
AMD Athlon 64 X2 5200+
Scheda Madre
Asrock
HDD
Maxtor 300GB
RAM
Corsair
GPU
nVidia Geforce 6150SE
Audio
Integrata mobo
OS
Windows 7 Home Premium 32bit
Salve a tutti! Ho un problema riguardo un programma sviluppato in C.

Questo è il codice sorgente con il relativo problema indicato con un commento:

#include <stdio.h>


main()


{
char risp;
int d, y, a;

printf("vuoi iniziare il programma?\n");
scanf("%c", &risp);

switch (risp)

{

case 'si': // Qui DEV C++ mi da errore in compilazione ovvero: " 'si' undecleared (first use this function) "

printf("Inserisci il valore d: ");
scanf("%d", &d);

printf("Inserisci il valore y: ");
scanf("%d", &y);

a=x*y;

printf("Questa e' la tua area %d", a);

break;

case 'no':

printf("programma terminato");


default:
do

{ printf("ERRORE!");
printf("inserisci di nuovo la risposta: ");
scanf("%d", &risp);
}
while (r1=='si');

}

getchar();
getchar();
getchar();
getchar();
getchar();

}

Mi potreste dare una mano??
Grazie anticipatamente!
 

cawletto

Utente Attivo
475
25
CPU
i5 750
HDD
1 TB
RAM
6 GB
GPU
GXT 460 SE 1GB overclocked
Monitor
Samsung LCD 1280x1024
PSU
Cooler Master Silent Pro M 600 W
Case
HP
OS
Windows 7-64 bit
Lo switch non funziona con le stringhe.. Solo int!
Per intenderci:
case 'si': non funzionerà
case '1': funzionerà

Siccome nel tuo programma ci sono solo 2 condizioni (si e no) risolvi usando un semplice if-else
 

JoyGeneration

Utente Attivo
157
6
CPU
AMD Athlon 64 X2 5200+
Scheda Madre
Asrock
HDD
Maxtor 300GB
RAM
Corsair
GPU
nVidia Geforce 6150SE
Audio
Integrata mobo
OS
Windows 7 Home Premium 32bit
OK! Ma ho fatto un altro programma in cui le stringhe funzionano con lo switch!
Ovvero:

#include <stdio.h>


main()


{
char nota;
printf("immetti una nota: ");
scanf("%c", &nota);

switch (nota)

{
case 'A':
printf("la\n");
break;

case 'B':
printf("sa\n");
break;

case 'C':
printf("do\n");
break;

default:
printf("la nota non esiste");

}

getchar();
getchar();

}
 

cawletto

Utente Attivo
475
25
CPU
i5 750
HDD
1 TB
RAM
6 GB
GPU
GXT 460 SE 1GB overclocked
Monitor
Samsung LCD 1280x1024
PSU
Cooler Master Silent Pro M 600 W
Case
HP
OS
Windows 7-64 bit
No, lì non stai usando stringhe ma caratteri (char). Evidentemente i singoli caratteri sono accettati ugualmente!
Ho fatto una breve ricerca e questi sono i tipi di variabili che lo switch può accettare:
int, shor, long o char.
 

JoyGeneration

Utente Attivo
157
6
CPU
AMD Athlon 64 X2 5200+
Scheda Madre
Asrock
HDD
Maxtor 300GB
RAM
Corsair
GPU
nVidia Geforce 6150SE
Audio
Integrata mobo
OS
Windows 7 Home Premium 32bit
Mmm, ok! Ora mi si sta presentando un altro problema.
Ecco qui il codice, metterò un commento dove è l'errore:

#include <stdio.h>


main()


{
char risp;
int d, y, a;

printf("Premi 1 se vuoi continuare, 2 se vuoi terminare il programma\n");

printf("Vuoi iniziare il programma?\n");
scanf("%c", &risp);

switch (risp)

{

case '1':

printf("Inserisci il valore x: ");
scanf("%d", &d);

printf("Inserisci il valore y: ");
scanf("%d", &y);

a=d*y;

printf("Questa e' la tua area %d", a);

break;

case '2':

printf("programma terminato");


default:
do

{ printf("ERRORE!\n");
printf("Inserisci di nuovo la risposta: ");
scanf("%d", &risp);
}
while (risp!='1' | risp!='2'); /* Qui non mi da errore di compilazione, ma digitando qualsiasi numero (che sia anche 1 o 2) mi ripete il ciclo all'infinito, ovvero non riconosce più nessun tipo di numero e non si esce più dal programma! */

}

getchar();
getchar();

}
 

cawletto

Utente Attivo
475
25
CPU
i5 750
HDD
1 TB
RAM
6 GB
GPU
GXT 460 SE 1GB overclocked
Monitor
Samsung LCD 1280x1024
PSU
Cooler Master Silent Pro M 600 W
Case
HP
OS
Windows 7-64 bit
Innanzitutto per avere l'errore il numero inserito deve essere diverso sia da 1 che da 2. Quindi il while corretto è:
Codice:
[COLOR=#333333]do[/COLOR]
[COLOR=#333333]{
 printf("ERRORE!\n");[/COLOR]
[COLOR=#333333]printf("Inserisci di nuovo la risposta: ");[/COLOR]
[COLOR=#333333]scanf("%d", &risp);[/COLOR]
[COLOR=#333333]}[/COLOR]
[COLOR=#333333]while (risp!='1' && risp!='2'); [/COLOR]
}


---------- Post added at 19:25 ---------- Previous post was at 19:13 ----------

Ecco, ho usato una funzione ricorsiva :)
Codice:
#include <stdio.h>




main()




{
char risp;




printf("Premi 1 se vuoi continuare, 2 se vuoi terminare il programma\n");


printf("Vuoi iniziare il programma?\n");
scanf("%c", &risp);
[COLOR=#ff0000]check_risp(risp);[/COLOR]
}
[COLOR=#ff0000]void check_risp(risp)[/COLOR]
{
  int d, y, a;
switch (risp)


{


case '1':


printf("Inserisci il valore x: ");
scanf("%d", &d);


printf("Inserisci il valore y: ");
scanf("%d", &y);


a=d*y;


printf("Questa e' la tua area %d", a);


break;


case '2':


printf("programma terminato");




default:
do
{ printf("ERRORE!\n");
printf("Inserisci di nuovo la risposta: ");
scanf("[COLOR=#ff0000]%c[/COLOR]", &risp);
}
[COLOR=#ff0000]while (risp!='1' && risp!='2');[/COLOR]
[COLOR=#ff0000]check_risp(risp);[/COLOR]
}


getchar();
getchar();


}
 

JoyGeneration

Utente Attivo
157
6
CPU
AMD Athlon 64 X2 5200+
Scheda Madre
Asrock
HDD
Maxtor 300GB
RAM
Corsair
GPU
nVidia Geforce 6150SE
Audio
Integrata mobo
OS
Windows 7 Home Premium 32bit
Mi potresti spiegare cosa sono le funzioni ricorsive? Sono un neofita in ambito xD
Poi compilando mi check_risp me lo prende come variabile e mi dice "check_risp undecleared" :/
 

cawletto

Utente Attivo
475
25
CPU
i5 750
HDD
1 TB
RAM
6 GB
GPU
GXT 460 SE 1GB overclocked
Monitor
Samsung LCD 1280x1024
PSU
Cooler Master Silent Pro M 600 W
Case
HP
OS
Windows 7-64 bit
Mi potresti spiegare cosa sono le funzioni ricorsive? Sono un neofita in ambito xD
Poi compilando mi check_risp me lo prende come variabile e mi dice "check_risp undecleared" :/
A me funziona.. hai copiato per intero il mio codice??
Praticamente ho creato una funzione in cui ho inserito lo switch. Nel case default però esegue il ciclo fin quando non trova i numeri giusti (1,2). Se il numero questa volta è giusto invio il valore alla stessa funzione e riesegue il controllo :)
 

JoyGeneration

Utente Attivo
157
6
CPU
AMD Athlon 64 X2 5200+
Scheda Madre
Asrock
HDD
Maxtor 300GB
RAM
Corsair
GPU
nVidia Geforce 6150SE
Audio
Integrata mobo
OS
Windows 7 Home Premium 32bit
Ecco a te uno screenshot di ciò che mi dice devc++! ;)

check_risp_problem.jpg
 

cawletto

Utente Attivo
475
25
CPU
i5 750
HDD
1 TB
RAM
6 GB
GPU
GXT 460 SE 1GB overclocked
Monitor
Samsung LCD 1280x1024
PSU
Cooler Master Silent Pro M 600 W
Case
HP
OS
Windows 7-64 bit
Io uso code::block e non ho questo problema. Comunque sia appena posso gli do un occhiata e ti faccio sapere, avrò scordato qualcosa :)

---------- Post added at 22:31 ---------- Previous post was at 20:49 ----------

Mancava il prototipo della funzione (prima del main).
Codice:
#include <stdio.h>




void check_risp(int risp);


main()








{
char risp;








printf("Premi 1 se vuoi continuare, 2 se vuoi terminare il programma\n");




printf("Vuoi iniziare il programma?\n");
scanf("%c", &risp);
check_risp(risp);
}
void check_risp(risp)
{
  int d, y, a;
switch (risp)




{




case '1':




printf("Inserisci il valore x: ");
scanf("%d", &d);




printf("Inserisci il valore y: ");
scanf("%d", &y);




a=d*y;




printf("Questa e' la tua area %d", a);




break;




case '2':




printf("programma terminato");


[COLOR=#ff0000]exit(0); // se non lo aggiungi il programma non termina[/COLOR]




default:
do
{ printf("ERRORE!\n");
printf("Inserisci di nuovo la risposta: ");
scanf("%c", &risp);
}
while (risp!='1' && risp!='2');
check_risp(risp);
}




getchar();
getchar();




}
ps. ti ho aggiunto anche la funzione per far terminare il programma all'inserimento di 2.
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili