Ciao a tutti, cosa vuol dire quando Xcode inserisce questo errore?:
warning: format '%d' expects type 'int', but argument 2 has type 'int *'
PS: la variabile che richiamo è un int
Ciao a tutti, cosa vuol dire quando Xcode inserisce questo errore?:
warning: format '%d' expects type 'int', but argument 2 has type 'int *'
PS: la variabile che richiamo è un int
Non è un errore in senso stretto, ma un avvertimento. La funzione ( printf? ) con quel marcatore si aspetta un tipo int, ma tu gli stai passando un puntatore a int.
This code and information is provided "as is" without warranty of any kind, either expressed
or implied, including but not limited to the implied warranties of merchantability and/or
fitness for a particular purpose.
Ma in che senso? io gli passo int guarda:
codice:#include <stdio.h> int main () { int numeri[50]; int operazioni = 0, contatore = 1; while (numeri[operazioni] != 0) { printf("%d numero o 0 per calcolare: \n", &contatore); scanf("%d",&numeri[operazioni]); operazioni++; contatore++; } printf("%d", &numeri[1]); return 0; }
C'è la & di troppo. La printf si aspetta un int usando il marcatore %d. Se gli metti la & passi l'indirizzo di contatore, non contatore in se. Poiché la printf non modifica mai quanto gli viene passato, il compilatore ti avverte che hai fatto una svista nel passaggio del secondo parametro (contatore appunto).codice:printf("%d numero o 0 per calcolare: \n", &contatore);
This code and information is provided "as is" without warranty of any kind, either expressed
or implied, including but not limited to the implied warranties of merchantability and/or
fitness for a particular purpose.
Ahhhh grazie mille!!! quindi con printf non si usa perche non deve cambiare il contenuto... capito grazie mille.Originariamente inviato da shodan
C'è la & di troppo. La printf si aspetta un int usando il marcatore %d. Se gli metti la & passi l'indirizzo di contatore, non contatore in se. Poiché la printf non modifica mai quanto gli viene passato, il compilatore ti avverte che hai fatto una svista nel passaggio del secondo parametro (contatore appunto).codice:printf("%d numero o 0 per calcolare: \n", &contatore);
ma sai il motivo per il quale non si ferma il programma se inserisco il numero 0?
Inserisci 0 in numeri[operazioni]. Poi fai operazioni++.Originariamente inviato da gennahouse
ma sai il motivo per il quale non si ferma il programma se inserisco il numero 0?
Poi controlli se numeri[operazioni] è diverso da zero. Ti rendi conto quindi che stai andando a controllare una cosa che non è quella che tu hai inserito?
SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
Di questo libro e degli altri (blog personale di recensioni libri) | NO M.P. TECNICI
Ciao alex faccio cosi perche il primo sarà numeri[0] e poi con operazioni++ lo incrementa andando avanti con le variabili.Originariamente inviato da Alex'87
Inserisci 0 in numeri[operazioni]. Poi fai operazioni++.
Poi controlli se numeri[operazioni] è diverso da zero. Ti rendi conto quindi che stai andando a controllare una cosa che non è quella che tu hai inserito?
Poi io vado a controllare il valore di numeri[] quindi, secondo il mio ragionamento il ciclo durerà finche non inserisco 0 nello scanf e di conseguenza un array numeri[] avra il valore 0 che farà terminare il ciclo...
Non è cosi? o.O
Ipotizziamo che operazioni valga 3. Tu inserisci zero in posizione 3. Poi fai operazioni++. Quindi operazioni vale 4. Adesso controlli se numeri[4] è diverso da zero. Ma tu lo zero lo hai salvato in numeri[3]!Originariamente inviato da gennahouse
Non è cosi? o.O
Comunque è per puro culo che che quel ciclo non ti da problemi: all'inizio nell'array ci sono una serie di valori casuali e quando viene verificata la condizione controlli se una cella di memoria non inizializzata sia diversa da zero. Capisci che non va bene questo?
Per quello che vuoi fare te è meglio usare un do-while.
SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
Di questo libro e degli altri (blog personale di recensioni libri) | NO M.P. TECNICI
Tu dici di fare cosi?
il problema è che quando inserisco 0 non termina il ciclo.codice:#include <stdio.h> int main () { int numeri[50]; int operazioni = 0, contatore = 1; do { printf("%d numero o 0 per calcolare: \n", contatore); scanf("%d",&numeri[operazioni]); operazioni++; contatore++; }while (numeri[operazioni] != 0); printf("%d", numeri[1]); return 0; }
ecco il codice giusto
Grazie alex!!!codice:#include <stdio.h> int main () { int numeri[50]; int operazioni = 0, contatore = 1; do { printf("%d numero o 0 per calcolare: \n", contatore); scanf("%d",&numeri[operazioni]); }while (numeri[operazioni] != 0);{ operazioni++; contatore++; } printf("%d", numeri[1]); return 0; }
Ehm... Così facendo salverai il numero sempre nella posizione 0! Se ci fai caso la variabile operazioni la incrementi FUORI dal cicloOriginariamente inviato da gennahouse
ecco il codice giusto
codice:#include <stdio.h> int main () { int numeri[50]; int operazioni = 0, contatore = 1; do { printf("%d numero o 0 per calcolare: \n", contatore); scanf("%d",&numeri[operazioni]); }while (numeri[operazioni] != 0); { operazioni++; contatore++; } printf("%d", numeri[1]); return 0; }
SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
Di questo libro e degli altri (blog personale di recensioni libri) | NO M.P. TECNICI