Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Programmino in C [AIUTO!]

    Salve ragazzi,
    ho scritto questa semplice programmino che acquisisce da tastiera 2 vettori e restituisce un terzo vettore con la somma dei primi 2 vettori.

    Il problema è che non so per quale motivo, dopo aver inserito il primo valore, windows genera errore e mi chiude il programma...

    Questo è il sorgente:
    // Inclusione delle librerie di sistema utili al programma
    #include <stdio.h>

    int main(){
    // Dichiarazione dei vettori che conterranno le componenti
    int vettore_1[1];
    int vettore_2[1];
    int vettore_3[1];

    // Inserimento dati nei vettori 1 e 2
    printf("* INSERIMENTO COMPONENTI NEL VETTORE 1 *\n\n");

    printf("Inserisci la componente X del vettore 1: ");
    scanf("%i \n", vettore_1[0]);
    printf("Inserisci la componente Y del vettore 1: ");
    scanf("%i \n\n", vettore_1[1]);

    printf("* INSERIMENTO COMPONENTI NEL VETTORE 2 *\n\n");

    printf("Inserisci la componente X del vettore 2: ");
    scanf("%i \n", vettore_2[0]);
    printf("Inserisci la componente Y del vettore 2: ");
    scanf("%i \n", vettore_2[1]);

    // Somma vettoriare
    vettore_3[0] = vettore_1[0] + vettore_2[0];
    vettore_3[1] = vettore_1[1] + vettore_2[1];

    // Stampa a video il vettore 3
    printf("%ii + %ij\n", vettore_1[0], vettore_1[1]);
    printf("%ii + %ij\n", vettore_2[0], vettore_2[1]);
    printf("RISULTATO:\n");
    printf("%ii + %ij\n", vettore_3[0], vettore_3[1]);
    return 0;

    }
    C'è qualche errore ke il debugger non mi segnala? :\
    Mantisworks.net - Soluzioni dal web per il web!
    SEO, SEM, Software, Siti internet, Grafica e Multimedia

  2. #2
    Risolto.. ^_^
    Avevo dimenticato di inserire "&" prima della variabile da acquisire!

    Però ora per fare acquisire il primo numero devo battere 2 volte INVIO °_°
    Mantisworks.net - Soluzioni dal web per il web!
    SEO, SEM, Software, Siti internet, Grafica e Multimedia

  3. #3
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    in un vettore a una sola dimensione inserisci due interi???
    p.s: la stampa è incasinatissima...

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    Un titolo più significativo, in futuro, sarebbe consigliabile, come da Regolamento.

    Questo l'ho corretto io.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Grazie alka

    Ma i vettori non hanno l'indice ke parte da 0? quindi vettore[1] dovrebbe contenere vettore[0] e vettore[1]??
    Mantisworks.net - Soluzioni dal web per il web!
    SEO, SEM, Software, Siti internet, Grafica e Multimedia

  6. #6
    Certo che no!!!!

    int vettore_1[1];

    Crea un vettore di un solo elemento intero, cioè vettore_1[0]

  7. #7
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    come ha detto doraemon, l'indice contenuto nella dichiarazione serve per dimensionare il vettore con un numero di elementi pari proprio al valore dell'indice. Che poi tu, se lo inizializzi in fase di dichiarazione non usi, ma se lo fai altrove dovrai usare un range di indici che vanno da 0 alla lunghezza dichiarata -1, quindi nel tuo caso da 0 a 0.

    Penso comunque che non vada in errore se arricchisci il vettore oltre la dimensione allocata a tempo di dichiarazione, ma potresti ritrovarti con errori sgraditi in fase di esecuzione; infatti il tuo codice mi pare che sballi i valori.

    detto questo, cambia le dichiarazioni in vettore_n[2]

  8. #8
    Grazie ragazzi ^_^
    Mantisworks.net - Soluzioni dal web per il web!
    SEO, SEM, Software, Siti internet, Grafica e Multimedia

  9. #9
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    qui viene spiegata meglio la cosa...

    Uno degli errori che spesso accadono nella manipolazione degli elementi di un array è quello di far riferimento ad elementi che vanno oltre il limite della dimensione dell'array precedentemente definita.
    Il C++ (e lo stesso C), come magari si sarebbe portati a pensare, non effettua nessun controllo sugli indici che si utilizzano quando si eseguono operazioni sugli array. Per cui, ad esempio, se eseguiamo il seguente codice:

    codice:
    int array_tre[10];
    ......
    ...... // L'array viene inizializzato
    int i;
    for(i=0; i < 14; i++)
    {
    cout << array_tre[i] << endl;
    }
    il risultato sarà corretto fino a quando la variabile i sarà minore o uguale a 9 (infatti la dimensione dell'array è stata definita essere uguale a 10). Quello che avverrà, quando il programma cercherà di andare a leggere i valori array_tre[10], array_tre[11], array_tre[12] e array_tre[13] è assolutamente casuale. Infatti, il programma andrà a leggere delle aree di memoria che non sono state inizializzate o, addirittura, che contengono dei valori relativi ad altre variabili, stampando quindi sullo schermo risultati inaspettati.
    http://programmazione.html.it/guide/...e-di-un-array/

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.