Vai al contenuto

problema int e %d


Messaggi raccomandati

ciao a tutti, sto scrivendo una semplice funzione per sommare due interi su Xcode 

int main(void){
    
    int a;
    int b;
    printf ("numero\n");
    scanf("%d",a);
    printf("numero\n");
    scanf ("%d",b);
    int sum;
    sum=a+b;
    printf("la somma è %d",sum);
    
    
}

ma accanto agli scanf mi da errore dicendomi che %d serve per un int* e non int, qualcuno sa perché?

Link al commento
Condividi su altri siti

Questo è C (Objective C è un superset di C quindi questo vale anche per Objective C, con la differenza che in Objective C ci sono altre librerie che possono essere usate in sostituzione).

Il problema è molto semplice, in C quando devi leggere una variabile con scanf devi passagli il riferimento (l'indirizzo) della variabile in memoria, passandogli la variabile senza & gli stai passando il valore delle tue variabili (non l'indirizzo in cui andare a scrivere).

Un'altra spiegazione la puoi trovare qui:

http://www.science.unitn.it/~fiorella/guidac/guidac068.html

 

Per imparare bene il C è molto importante capire quando stai passando un indirizzo e quando invece stai passando un valore.

 

È importante che tu abbia corretto, ma è anche importante capire il perchè.

 

I linguaggi moderni (Java, C#, Swift ecc...) usano un'allocazione automatica della memoria quindi non hanno di questi problemi, ma capire la differenza tra le due cose è comunque importante.

 

Per finire il mio consiglio è di inizializzare sempre le variabili (anche se non è obbligatorio). quindi all'inizio del tuo programma scriverai int a = 0; int b = 0;. Questo perchè senza inizializzarle non puoi sapere quale valore è contenuto all'interno di tali variabili e in caso di malfunzionamento questo significa problemi.

l'inizializzazione in alcuni linguaggi (Java) è fatta automaticamente, ma in C è meglio ricordarsi di farla sempre (è in realtà buona pratica farlo in qualsiasi linguaggio).

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...