Problema relativo alle funzioni

di il
16 risposte

Problema relativo alle funzioni

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

  • Re: Problema relativo alle funzioni

    Qui

    scanf("&c", &acc);

    manca un %

    ma come sarebbe l'accordo? (c'è anche chi non ne sa nulla di musica ...)
  • Re: Problema relativo alle funzioni

    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 .
  • Re: Problema relativo alle funzioni

    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!
  • Re: Problema relativo alle funzioni

    Stampa 97 ma tu cosa inserisci?
  • Re: Problema relativo alle funzioni

    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().
  • Re: Problema relativo alle funzioni

    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;
    }	
    
  • Re: Problema relativo alle funzioni

    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.
  • Re: Problema relativo alle funzioni

    Ok, quindi la variabile tab la dichiaro come array char, ma nel return della funzione acc_maj cosa ci dovrei mettere?
  • Re: Problema relativo alle funzioni

    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).
  • Re: Problema relativo alle funzioni

    O meglio ancora

    printf("%06d", tab);
  • Re: Problema relativo alle funzioni

    Il problema è che non a tutti gli accordi devo dare in output degli zeri agli inizio, quindi sarebbe un bel macello.
  • Re: Problema relativo alle funzioni

    Se non sappiamo tutte le regole come facciamo a farti consigli... ?
  • Re: Problema relativo alle funzioni

    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.
  • Re: Problema relativo alle funzioni

    Rileggi l'ultimo mio post ... forse non l'hai visto ...
Devi accedere o registrarti per scrivere nel forum
16 risposte