Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [C] Errore for - array

    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>

    int main(){


        
    printf("Ciao, come ti chiami?:       (Massimo numeri di caratteri: 10) \n");

        
    char nome[10];
        
    int numeri[10];

        
    scanf("%s",&nome);

        
    printf("Bene il tuo nome è: \n");
        
    printf("%s"nome);
        
    printf("Quanti numeri vuoi addizionare?     (Max 10) \n");

        
    scanf("%d",&numeri);

        
    int arr[10];

            
    int i;

            for (
    i=0i<numerii++)
            {
                
    printf ("Inserisci il numero N°");printf("%d"i);printf (" \n");
                
    scanf("%d",&arr[i]);
                
    printf (" \n");
            }

        return 
    0;

    Dice che l'errore è alla riga 24 cioè for (i=0; i<numeri; i++) ma io non lo vedo :S

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    "numeri" è un array, che senso ha chiedersi "l'intero i è minore di un array?"?
    Un'altra cosa. Perché usi printf in quel modo bizzarro?

    codice:
                printf ("Inserisci il numero N°");printf("%d", i);printf (" \n");
    Puoi scriverlo usando un'unica chiamata alla funzione, è più efficiente:
    codice:
    printf("Inserisci il numero N° %d\n", i);
    Prova così:

    codice:
    #include <stdio.h> 
    #include <stdlib.h> 
    
    int main() { 
        char nome[10]; 
        int arr[10]; 
        int numeri;
        int i; 
        
        printf("Ciao, come ti chiami (MAX 10 caratteri)? "); 
        scanf("%s", nome); 
    
        printf("Bene il tuo nome è: %s\n", nome); 
        printf("Quanti numeri vuoi addizionare (MAX 10)? "); 
    
        scanf("%d", &numeri);
    
        for (i = 0; i < numeri; i++) { 
            printf("Inserisci il numero i-esimo: "); 
            scanf("%d", &arr[i]); 
        } 
    
        /* manca la parte di addizionamento */
    
        return 0; 
    }
    edit
    Un'altra cosa ancora. Scrivere
    codice:
    scanf("%s",&nome);
    è errato! "nome" è un array e come tale è già un indirizzo! L'operatore "indirizzo di" non va scritto:
    codice:
    scanf("%s", nome);
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    ops, messaggio doppio
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Scusa hai ragione di tutto ma è da ieri che sto imparando il C e sono un neofita.
    Il programma che vorrei fare non è ancora completato.

    Usavo questa stringa: i < numeri; per poter far ciclare il for per il numero di numeri che l'utente vuole addizionare.
    (Quindi per far in modo di poter inserire TOT numeri da addizionare).

    Cmq se provi ad compilare ti accorgerai che si blocca.

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da elmapomapo
    Usavo questa stringa: i < numeri; per poter far ciclare il for per il numero di numeri che l'utente vuole addizionare.
    Ok, ma numeri è un vettore, i è un semplice intero. Non puoi confrontare tipi semplici con vettori!

    Anche il compilatore te lo fa notare:
    test.c:24: warning: comparison between pointer and integer
    Occhio che è solo un "avvertimento", non è un errore. Ad ogni modo in quel modo il programma non funziona (mi chiede i numeri all'infinito, anche se ne ho chiesti solo due!)

    Guarda il codice che ti ho postato, quello l'ho testato e funziona!
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Ok il tuo funziona.

    Ho provato a fare una funzione che addizionava gli array:
    Codice PHP:
        int somma_arr(){

            
    int f;

            for (
    0numerif++) {

                
    int v f++;

                
    int somma arr[f] + arr[v];

            }

            
    printf("Bene la somma dei tuoi caratteri e': %d\n"somma);

            return 
    somma;

        } 
    Ma da un errore alla prima riga cioè alla definizione della funzione!

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Originariamente inviato da elmapomapo
    Ok il tuo funziona.

    Ho provato a fare una funzione che addizionava gli array:
    Codice PHP:
        int somma_arr(){

            
    int f;

            for (
    0numerif++) {

                
    int v f++;

                
    int somma arr[f] + arr[v];

            }

            
    printf("Bene la somma dei tuoi caratteri e': %d\n"somma);

            return 
    somma;

        } 
    Ma da un errore alla prima riga cioè alla definizione della funzione!
    Ho provato a compilare il tuo codice aggiungendo come variabili globali

    codice:
    int numeri[10];
    int arr[10];
    E in ogni caso non compila. Non so perchè ti dia l'errore alla dichiarazione di funzione, sei sicuro di aver inserito o il prototipo (o cmq di averla dichiarata prima di usarla)?

    Per sommare un array fai così:

    codice:
    int somma()
    {
        int somma = 0;
    
        for (int i = 0; i < lunghezza_array; i++)
        {
            somma += arr[i];
        }
    
        return somma;
    }
    Nel tuo codice c'era il problema che non avresti calcolato la somma corretta. Supponiamo questo array:

    codice:
    int arr[] = { 1, 2, 3, 4 };
    La somma corretta è 10, ok? Con il tuo algoritmo hai 7. Questo perchè (a parte che consideri 2 volte ogni membro dell'array) ad ogni ciclo sovrascrivi la somma calcolata finora. Queste sempre sperando di evitare un segmentation fault.

    Questo perchè la lunghezza dell'array è 4. Se f = 3 --> v = 4. arr[4] non esiste --> segmentation fault.

    Di più: se dichiari la variabile somma in quella posizione, avrai un errore anche su return. La variabile somma viene dichiarata all'interno del ciclo for, e una volta finito il ciclo, viene eliminata. somma non è visibile fuori dal blocco del ciclo for e quindi quando provi a fare "return somma" ti da un errore perchè la variabile non è visibile in quella posizione.

    Ciao!
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da elmapomapo
    Ho provato a fare una funzione che addizionava gli array:
    Codice PHP:
        int somma_arr(){

            
    int f;

            for (
    0numerif++) {

                
    int v f++;

                
    int somma arr[f] + arr[v];

            }

            
    printf("Bene la somma dei tuoi caratteri e': %d\n"somma);

            return 
    somma;

        } 
    Ma da un errore alla prima riga cioè alla definizione della funzione!
    Che errore ti da?

    Ad ogni modo in questo pezzo di codice ci sono diversi problemi:

    1. Incrementi la variabile di ciclo 2 volte: in questo modo salti metà degli elementi.
    2. Dichiari una variabile locale al for, "somma", e poi la usi al di fuori del for stesso. È un errore, "somma" è come se non esistesse al di fuori di quel ciclo!

    Una possibile soluzione è la seguente:
    codice:
    int somma_arr(){
      int i;
      int somma = 0; /* e' importante inizializzare a zero questa variabile!! */
    
      for (i = 0; i < numeri; i++) {
        somma += arr[i];
        /* oppure: somma = somma + arr[i]; */
      }
    
      printf("La somma e\' %d\n", somma);
      return somma;
    }
    Ho dato per scontato che "numeri" e "arr" siano variabili globali. Se sono dichiarate internalmente al main ovviamente non sono visibili in somma_arr ed in qualche modo dovrai passarle:

    codice:
    #include <stdio.h> 
    #include <stdlib.h> 
    
    /* prototipo della funzione */
    int somma_arr(int *, int);
    
    int main() { 
        char nome[10]; 
        int arr[10]; 
        int numeri;
        int somma;
        int i; 
        
        printf("Ciao, come ti chiami (MAX 10 caratteri)? "); 
        scanf("%s", nome); 
    
        printf("Bene il tuo nome è: %s\n", nome); 
        printf("Quanti numeri vuoi addizionare (MAX 10)? "); 
    
        scanf("%d", &numeri);
    
        for (i = 0; i < numeri; i++) { 
            printf("Inserisci il numero i-esimo: "); 
            scanf("%d", &arr[i]); 
        } 
    
        /* Chiama la funzione che fa la somma. */
        somma = somma_arr(arr, numeri);
    
        printf("La somma dei numeri che hai inserito e\' %d\n", somma);
    
        return 0; 
    }
    
    /* Funzione di somma. */
    int somma_arr(int *arr, int numero_elementi){
      int i;
      int somma = 0;
    
      for (i = 0; i < numero_elementi; i++) {
        somma += arr[i];
      }
    
      return somma;
    }
    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
    Ok grazie alex la tua versione del programmino funziona, e grazie ad entrambi per le diritte! ma ci sono delle cose che non ho capito bene...

    Originariamente inviato da Alex'87
    codice:
    /* prototipo della funzione */
    int somma_arr(int *, int);
    Cosa vuol dire questo pezzo di codice?

    Poi cosa vuol dire "+=" ?
    Originariamente inviato da Alex'87
    codice:
    somma += arr[i];
    Ed infine facendo caso, errore che dava era perchè dichiaravo la funzione nel main. Ma perchè si dichiara fuori?

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da elmapomapo
    Cosa vuol dire questo pezzo di codice?
    codice:
    int somma_arr(int *, int);
    È il prototipo della funzione. In pratica dichiari il nome della funzione ed il tipo (e numero) dei suoi parametri.
    Prima di usare una variabile la devi dichiarare. Allo stesso modo, prima di usare una funzione questa *andrebbe* dichiarata. Attenzione che non sei obbligato! Se ad esempio in questo caso non serve:

    codice:
    #include <stdio.h> 
    #include <stdlib.h> 
    
    /* Funzione di somma. */
    int somma_arr(int *arr, int numero_elementi){
      ...
      return somma;
    }
    
    int main() { 
        ...
    
        /* Chiama la funzione che fa la somma. */
        somma = somma_arr(arr, numeri);
    
        printf("La somma dei numeri che hai inserito e' %d\n", somma);
    
        return 0; 
    }
    Ovvero: se la funzione viene definita prima di essere chiamata non è necessario scrivere il prototipo. Se la funzione viene definita dopo allora il prototipo è necessario. Nel primo esempio che ti ho fatto prova a togliere il prototipo: vedrai che ora otterrai un errore di compilazione.

    Originariamente inviato da elmapomapo
    Poi cosa vuol dire "+=" ?
    È la forma breve per fare una somma con assegnamento.

    Scrivere
    codice:
    a = a + b;
    o
    codice:
    a += b;
    è esattamente la stessa cosa. Si può fare anche con gli altri operatori:
    codice:
    a = a / b; --> a /= b;
    a = a - b; --> a -= b;
    a = a * b; --> a *= b;
    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.