Cita:
Iniciado por pablomr960 Hola tengo un problema con un problema en el que debo hacer una funcion que devuelva un vector que sea suma de dos vectores que yo le paso.El problema viene cuando imprimo el valor de la suma que se le va la cabeza e imprible valores alazar.
El programa guarda bien los valores que hay en el archivo que le mando abrir que son {1,2,3} y {4,5,6} asique el problema esta al devolver el vector e imprimirlo.
Tienes un par de errores más a lo que ya te han comentado.
* Después de obtener las longitudes no dimensionas los vectores:
Código C++:
Ver originalscanf ( "%d" , &longi
) ; vec
= malloc ( longi
* sizeof ( int ) ) ; ................................................
scanf( "%d" , &longi_2
) ; vec_2
= malloc ( longi_2
* sizeof ( int ) ) ; .........................................
* Intentas imprimir vec_tot como si fuera un int en :
Cuando lo que procede es imprimir sus componentes:
* Si no son de igual longitud debes salir del programa. El getchar es sólo una pequeña pausa pero el código seguirá en main e imprimirá basura en ese caso:
Código C++:
Ver originalif ( longi != longi_2 ) {
printf("Tamaño dos vectores distintos.") ; }
* Como hagas un programa un poco serio se te van a acabar las líneas si usas una para cada variable. Un método es agruparlas por tipo, algo como:
Código C++:
Ver originalint i , longi , longi_2 ;
int *vec , *vec_2, *vec_tot ;
Y acostúmbrate a usar si procede una misma variable para diferentes bucles que no estén anidados, no un índice para cada bucle:
Código C++:
Ver originalfor ( i = 0 ; i < longi ; i++ )
scanf ( "%d" , &vec
[i
] ) ; .........................................
for ( i = 0 ; i < longi_2 ; i++ )
scanf( "%d" , &vec_2
[i
] ) ; ...........................................
for ( i = 0 ; i < longi_2 ; i++ )
printf ( "%d ", vec_tot
[i
] );
Como ves he usado un sola variable para los tres bucles.
* return no es una función por lo que no es necesario el uso del paréntesis en EXIT_SUCCESS.
Y para que no se diga, y ya que has propuesto un código trabajado, te pongo uno pero con scanf, para que veas que funciona. Ya tú tendrás que pasarlo a fscanf y al fichero:
Código C++:
Ver original#include <stdio.h>
#include <stdlib.h>
int *Suma ( int *vec , int *vec_2 , int longi , int longi_2 ) ;
int main ( void ) {
int i , longi , longi_2 ;
int *vec , *vec_2, *vec_tot ;
scanf ( "%d" , &longi
) ; vec
= malloc ( longi
* sizeof ( int ) ) ; for ( i = 0 ; i < longi ; i++ )
scanf ( "%d" , &vec
[i
] ) ;
scanf( "%d" , &longi_2
) ; vec_2
= malloc ( longi_2
* sizeof ( int ) ) ; for ( i = 0 ; i < longi_2 ; i++ )
scanf( "%d" , &vec_2
[i
] ) ;
vec_tot = Suma ( vec , vec_2 , longi , longi_2 ) ;
for ( i = 0 ; i < longi_2 ; i++ )
printf ( "%d ", vec_tot
[i
] ); return EXIT_SUCCESS ;
}
int *Suma( int *vec , int *vec_2 , int longi , int longi_2 ) {
int i , *vec_tot;
if ( longi != longi_2 ) {
printf("Tamaño dos vectores distintos.") ; }
else {
vec_tot
= malloc ( longi
* sizeof ( int ) ) ; for ( i = 0 ; i < longi ; i++ )
vec_tot [i] = vec [i] + vec_2 [i] ;
}
return vec_tot;
}
¡¡¡Saluditos!!!