Problema relativo alle funzioni

di Anonimizzato14596 il
16 risposte
Buonasera ragazzi, avevo in mente di realizzare un programmino in c per stampare gli accordi maggiori della chitarra utilizzando le funzioni, dando in input a (l'accordo di la maggiore), il programma non mi restituiva l'accordo ma bensì uno 0. Avete qualche suggerimento?
ps. ecco il codice, capace (in teoria) di stampare solo l'accordo di la:
#include<stdio.h>
#include<stdlib.h>
int acc_maj(char acc){
int tab;
if(acc=='a'){
tab=002220;	
}
}
int main()
{
int tab;
char acc;
printf("Inserisci accordo\n");
scanf("&c", &acc);
tab = acc_maj (acc);
printf("%d\n", tab);
system("pause");
return 0;
}

16 Risposte

  • Qui

    scanf("&c", &acc);

    manca un %

    ma come sarebbe l'accordo? (c'è anche chi non ne sa nulla di musica ...)
  • L'accordo sarebbe il valore che assegno a tab nella funzione acc_maj, comunque ho sostituito la e commerciale con % (non so dove avessi la testa) e ora mi stampa 97 .
  • Prova a togliere quel 00 davanti all'assegnazione (tab = 002220 -> tab = 2220). durante l'assegnazione ci sono dei "numeri speciali" per identificare la base del numero (decimale, ottale, esadecimale, binario, ecc) e se non ricordo male i due caratteri "00" sono proprio una di queste "combinazioni speciali". so che con uno 0 davanti assegnavi un numero in base 8, con 00 non ricordo esattamente cosa accadeva.. prova e poi facci sapere.
    ah e altra cosa, ma più importante di tutto, INDENTA DECENTEMENTE IL TUO CODICE!
  • Stampa 97 ma tu cosa inserisci?
  • Probabilmente lui inserisce il carattere "a" che nella notazione musicale anglosassone corrisponde alla nota La, volendo dunque indicare un accordo di La maggiore.
    ...e - come è noto - il carattere "a" corrisponde al valore ASCII 97.
    Se poniamo la lettera "b", che nella notazione anglosassone corrisponde alla nota SI, il programma stampa in Terminale il valore 98.

    ...manca il return nella funzione acc_maj().
  • Ok, ho rivisto il codice e funziona, ma i due zeri stampati all'inizio sono fondamentali, qualche suggerimento per visualizzarli?
    Vi posto il codice:
    
    #include<stdio.h>
    #include<stdlib.h>
    int acc_maj(int acc){
    float tab;
    if(acc='a'){
    tab = 2220;	
    }
    return tab;
    }
    main()
    {
    int tab;
    char acc;
    int i;
    printf("Inserisci accordo\n");
    scanf("%c", &acc);
    tab = acc_maj(acc);
    printf("%d", tab);
    system("pause");
    return 0;
    }	
    
  • Se vuoi stampare degli zeri devi utilizzare stringhe non interi, in automatico un intero non ha zeri.
    Cioè se scrivi:
    int x=0015;
    hai assegnato il valore 15 a x.
  • Ok, quindi la variabile tab la dichiaro come array char, ma nel return della funzione acc_maj cosa ci dovrei mettere?
  • mattia113 ha scritto:


    Ok, quindi la variabile tab la dichiaro come array char, ma nel return della funzione acc_maj cosa ci dovrei mettere?
    se ci sono sempre degli zeri davanti, puoi inserirli direttamente nel printf per non stare a far troppi casini con le stringhe.
    ovvero anzìchè fare printf("%d", tab) farai printf("00%d", tab).
  • O meglio ancora

    printf("%06d", tab);
  • Il problema è che non a tutti gli accordi devo dare in output degli zeri agli inizio, quindi sarebbe un bel macello.
  • Se non sappiamo tutte le regole come facciamo a farti consigli... ?
  • Intendo dire che ci sono alcuni accordi che vanno stampati con due zeri all'inizio (tipo a), e altri che non vanno stampati con zeri all'inizio (f 133211), ma mi avete suggerito di mettere, per stampare l'accordo a printf("00%d"), ma nel caso in cui l'utente da in input f il pc darà in output 00133211, il che è errato.
  • Rileggi l'ultimo mio post ... forse non l'hai visto ...
Devi accedere o registrarti per scrivere nel forum
16 risposte