PDA

Visualizza la versione completa : [C] Uso di if() per valutazione scelte


elius
21-01-2011, 21:08
sto facendo un programma che fa sentire le note della chitarra e del basso per poterla accordare, utilizzando le funzioni contenute in "windows.h" : beep(freq,temp)

l'accordatore funziona però vorrei aggiungere una cosa



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

int main(int argc, char *argv[])


{
int A,X,S;
printf(" ******************************\n");
printf(" * ACCORDATORE CHITARRA 440Hz *\n");
printf(" ******************************\n");
printf(" by Elius\n\n");
getch();
printf("\a");
printf("Scrivi quale strumento vuoi accordare (chitarra, basso) [1,2]: ");
scanf("%i", &S);
if ("S=1")
{
printf("Premi un tasto per eseguire in sequenza le note:\n\n");
getch();
printf("E (mi) 83Hz\n");
beep(165,3000);
printf("A (la) 110Hz\n");
beep(220,3000);
printf("D (re) 146,8Hz\n");
beep(294,3000);
printf("G (sol) 196Hz\n");
beep(392,3000);
printf("B (si) 246,94Hz\n");
beep(494,3000);
printf("E (mi) 329,63Hz\n");
beep(659,3000);
}
else if ("S=2")
{
printf("Accordtore per Basso:\n\n");
printf("Premi un tasto per eseguire in sequenza le note:\n\n");
getch();
printf("E (mi) 83Hz\n");
beep(165,3000);
printf("A (la) 110Hz\n");
beep(220,3000);
printf("D (re) 146,8Hz\n");
beep(294,3000);
printf("G (sol) 196Hz\n");
beep(392,3000);
}
return 0;
}


vedete, così io farei che all'inizio il programma chiede di scrivere 1 o 2 a seconda di cosa si voglia accordare.

solo che così come ora non funziona, non da errore ma quando chiede di inserire 1 o 2 se premo 1 o 2 viene sempre la prima cosa in sequenza, ovvero l'accordatore per chitarra.

come seconda cosa vorrei sapere come fare a fare che una volta eseguito il tutto ritorni alla prima domanda senza spegnere tutto.
Grazie mille ;)

Laikius91
21-01-2011, 21:24
Scusami la domanda, non voglio sembrare ingenuo, ma è in C?
Lo chiedo perchè non vorrei che fosse un altro linguaggio (io oltre al C non ho ancora studiato altro :D )...
Se è C, è pieno zeppo di errori.. :madai!?:

elius
21-01-2011, 21:25
ahah si è in c, cmq il compilatore dev c++ impostato per compilare il progetto in linguaggio C ansi, non da errori, sapresti darmi una mano per la sequenza di if?

elius
21-01-2011, 21:29
ragazzi mi sono corretto! dentro if non andava bene il fatto che avevo messo un solo "="
ora ho messo if (S==1) e va tutto!

Ora solo una cosa:

Come faccio a fare in modo che una volta finito il blocco di funzioni si ritorni all'inizio?

YuYevon
21-01-2011, 21:33
Originariamente inviato da elius
Come faccio a fare in modo che una volta finito il blocco di funzioni si ritorni all'inizio?

Intendi per ripetere le stesse istruzioni? Con un ciclo iterativo, ovviamente.
Comunque l'errore non consisteva solo nel = invece di == ma anche negli apici doppi " che non vanno nelle condizioni degli if.

Laikius91
21-01-2011, 21:34
Dunque dunque...
Alcune cose che non capisco: perchè hai messo le virgolette nelle condizioni degli if?? getch (), lo ammetto, da ignorante, non l'avevo mai sentita nominare, sempre sentita getchar (); e il formato della scanf "%i"?? per gli interi si usa "%d"!! :confused:
Comunque l'errore che intendi tu dovrebbe essere che negli if in pratica tu fai degli assegnamenti e quindi entra sempre nel primo caso...
Prova a mettere:


if (S == 1);

e nel secondo caso:


if (S == 2);

elius
21-01-2011, 21:35
esatto infatti ho rimosso anche gli apici!
Mi sapreste spiegare come eseguire il ciclo interativo ?
avevo iniziato a studiare il while do e do while ma non lo abbiamo ancora iniziato a scuola...

Vi sarei grato se mi riusciste a spiegare con un esempio sul mio sorgente come fare :)

Laikius91
21-01-2011, 21:44
I due if li metti dentro un do-while e alla fine chiedi se si vuole terminare o no, se si esci dal ciclo, se no continui.

Tipo:



/* all' inizio */ char c; int cancel;

do
{

... /* i due if */

printf ("\nTerminare (s/n) ? ");
scanf ("%c", &c);
cancel = (c == s);
}
while (!cancel);

Però qualcuno mi chiarisce i dubbi che ho espresso prima?

YuYevon
21-01-2011, 21:48
Originariamente inviato da Laikius91
getch (), lo ammetto, da ignorante, non l'avevo mai sentita nominare, sempre sentita getchar ();

E' simile alla getchar() con la differenza che legge un solo carattere senza l'echo su terminale (cioè non viene stampato a video) e ritorna subito senza attendere la pressione di invio. Non è una funzione standard ISO.


Originariamente inviato da Laikius91
e il formato della scanf "%i"?? per gli interi si usa "%d"!! :confused:


Si può usare anche %i per gli int.


Per il resto, elius è meglio se studi da solo certi argomenti e cerchi di risolvere i problemi piuttosto che chiedere codice pronto su un forum.

PS: ehm... if non è una funzione :ecco:

Laikius91
21-01-2011, 21:52
Originariamente inviato da YuYevon
E' simile alla getchar() con la differenza che legge un solo carattere senza l'echo su terminale (cioè non viene stampato a video) e ritorna subito senza attendere la pressione di invio. Non è una funzione standard ISO.



Si può usare anche %i per gli int.


Grazie mille YuYevon, è già la terza o quarta volta che mi dai dritte interessanti :)

Loading