[C] problema estrazione da un vettore

di il
2 risposte

[C] problema estrazione da un vettore

Ciao ragazzi, stavo provando a scrivere un programma che mi estrae una sequenza di numeri da un vettore e la memorizza in un altro vettore.
Il programma di per se funziona, ma non capisco perché quando stampo il vettore v1[] dopo aver effettuato l'estrazione da questo vettore di una sequenza di 2 numeri che si trovano alla posizione p = 1 e p = 2, il primo numero stampato a video, del vettore v1[] non è il numero del primo elemento del vettore stesso.
Spero possiate aiutarmi.

Sorgente:


#include <stdio.h>

void stampa (int v[], int s);

int main (int argc, char *argv[]){
	int v1[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
	int v2[2] = {};
	int s2 = 2;
	int s1 = 9;
	int p = 1;
	int i = 0, k = 0;
	
	if (p < 0 || s2 <= 0 ){
	
		printf("Errore estrazione\n");
	}else{
	
		printf("STAMPO PRIMA DI ESTRARRE DALLA POSIZIONE 1 DI v[] 2 NUMERI : \n");
		stampa(v1,s1);
	
		for ( i = p,  k = 0; i < p + s2 + 1 ; i ++, k ++ ){
			v2[k] = v1[i];
		}
		printf("STAMPO DOPO L\' ESTRAZIONE IL VETTORE v1[]: \n");
		stampa(v1,s1);
		printf("STAMPO DOPO L\' ESTRAZIONE IL VETTORE v2[]: \n");
		stampa(v2,s2);
	}
	
	
	
	return 0;
}

void stampa (int v[], int s){
	int j = 0;
	for (j = 0; j < s; j ++ ){
		printf("%d ",v[j]);
	}
	printf("\n");
}

Ecco l'output:
Allegati:
27445_3d8d35204f572330a83de1815d9139fd.png
27445_3d8d35204f572330a83de1815d9139fd.png

2 Risposte

  • Re: [C] problema estrazione da un vettore

    Il problema è naturalmente nel ciclo for che fa la copia dei valori da un vettore all'altro
    
    		for ( i = p,  k = 0; i < p + s2 + 1 ; i ++, k ++ )
    
    p + s2 + 1 fanno s2+1 passi di copia, ovvero nel tuo caso 3
    e per fortuna che vai a sovrascrivere nella prima posizione dl primo vettore

    questo implica che i vettori sono allocati a rovescio?
    boh, qui mi perdo, forse essendo locali è normale così, non saprei
  • Re: [C] problema estrazione da un vettore

    StandardOil ha scritto:


    Il problema è naturalmente nel ciclo for che fa la copia dei valori da un vettore all'altro
    
    		for ( i = p,  k = 0; i < p + s2 + 1 ; i ++, k ++ )
    
    p + s2 + 1 fanno s2+1 passi di copia, ovvero nel tuo caso 3
    e per fortuna che vai a sovrascrivere nella prima posizione dl primo vettore

    questo implica che i vettori sono allocati a rovescio?
    boh, qui mi perdo, forse essendo locali è normale così, non saprei
    Molto chiaro, grazie mille
Devi accedere o registrarti per scrivere nel forum
2 risposte