Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: [C]Errore da Xcode

  1. #1

    [C]Errore da Xcode

    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

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    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.

  3. #3
    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;
    }

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    codice:
    printf("%d numero o 0 per calcolare: \n", &contatore);
    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).
    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.

  5. #5
    Originariamente inviato da shodan
    codice:
    printf("%d numero o 0 per calcolare: \n", &contatore);
    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).
    Ahhhh grazie mille!!! quindi con printf non si usa perche non deve cambiare il contenuto... capito grazie mille.

    ma sai il motivo per il quale non si ferma il programma se inserisco il numero 0?

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da gennahouse
    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++.
    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

  7. #7
    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?
    Ciao alex faccio cosi perche il primo sarà numeri[0] e poi con operazioni++ lo incrementa andando avanti con le variabili.

    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

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da gennahouse
    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]!

    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

  9. #9
    Tu dici di fare cosi?

    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;
    }
    il problema è che quando inserisco 0 non termina il ciclo.

    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;
    }
    Grazie alex!!!

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente 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;
    }
    Ehm... Così facendo salverai il numero sempre nella posizione 0! Se ci fai caso la variabile operazioni la incrementi FUORI dal ciclo
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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 © 2024 vBulletin Solutions, Inc. All rights reserved.