Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    11

    [C] Aiutino con funzione IF Grazie :)

    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

    codice:
    #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

  2. #2
    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 )...
    Se è C, è pieno zeppo di errori..
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    11
    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?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    11
    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?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    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.
    every day above ground is a good one

  6. #6
    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"!!
    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:

    codice:
    if (S == 1);
    e nel secondo caso:

    codice:
    if (S == 2);
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    11
    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

  8. #8
    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:

    codice:
    /* 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?
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    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"!!
    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
    every day above ground is a good one

  10. #10
    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
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.