Título: duda con arreglos Publicado por: sheva777 en 29 Mayo 2013, 05:18 am Tengo una duda con este codigo:
Lo que quiero hacer es llenar un arreglo de numeros desde archivo y despues desplegarlo en pantalla, lo unico malo es que me muestra mas numeros de los que tengo en el archivo, mi duda es saber el por que me pasa esto les dejo el archivo y el codigo. Gracias de ante mano archivo.txt 1 2 3 4 5 7 12 98 34 65 87 2 10 codigo #include <stdio.h> #include <stdlib.h> #define MAX 100 void llenar(int A[],FILE *archivo) { char nombreArchivo [20]; int k; int i; int c; printf("Nombre de archivo a trabajar con extensión (txt):"); scanf("%s",&nombreArchivo); archivo=fopen(nombreArchivo,"r"); while(archivo == NULL){ printf("El archivo no pudo abrirse\n"); printf("Nombre de archivo a trabajar con extensión (txt): "); scanf("%s",&nombreArchivo); archivo = fopen(nombreArchivo,"r"); } while(!feof(archivo)) { for(i=0;i<MAX;i=i+1) { fscanf(archivo,"%d",&c); A=c; printf("%d ",A); } } fclose(archivo); } int main() { int arreglo[MAX]; FILE *archivo=NULL; llenar(arreglo,archivo); } Título: Re: duda con arreglos Publicado por: sheva777 en 29 Mayo 2013, 05:55 am haciendo un poco mas de mi codigo tengo otra duda necesito saber el tamaño de mi arreglo para cual utilizo esto
int cantidad; cantidad=sizeof(A)/4; printf("El arreglo tiene %d elementos\n",cantidad); pero solo me muestra de tamaño lo siguiente El arreglo tiene 1 elementos Seria de gran ayuda si pudieran ayudarme a resolverlo. gracias. Título: Re: duda con arreglos Publicado por: rir3760 en 29 Mayo 2013, 16:03 pm Primero: cuando publiques código fuente utiliza las etiquetas de código. Estas se agregan mediante el cuadro desplegable con el texto "GeSHi" en la pagina de composición de mensajes, solo tienes que seleccionar ahí el lenguaje (C, C++, etc.).
Errores y deficiencias en ese programa hay varios. Por ejemplo en la función "llenar" lo primero que haces con el parámetro "archivo" es sobrescribir su valor y por ello no debe ser un parámetro sino una variable local a la función. El error principal se debe a que tratas de leer los números del archivo con dos bucles: Código En su lugar debes utilizar solo uno donde primero verificas que haya espacio en el array (validación del indice) y a continuación si se leyó con éxito un valor del archivo (valor de retorno de la función fscanf). El programa corregido: Código
---- En cuanto a tu segunda pregunta la respuesta es no, no puedes calcular el tamaño de un array pasado como argumento. Ello porque toda función declarada en alguna de estas dos formas: Código En realidad se procesa como: Código Para solucionarlo no hay opción mas que pasar de forma manual (mediante un parámetro adicional) el numero de elementos: Código
Un saludo |