Autor
|
Tema: Problema al compilar. (Leído 1,771 veces)
|
cantabria1234
Desconectado
Mensajes: 3
|
Buenas noches, soy principiante en programación en C y al hacer este problema me compila pero el programa deja de funcionar. Os adjunto el enunciado del ejercicio y mi código.
Muchas gracias de antemano.
Problema: En el fichero “comidas” esta la cantidad de calorıas que ingiere un animal en cada dıa, desglosada por alimentos (una lınea por cada dıa, con tantos valores como alimentos). El programa leer´a de teclado la cantidad de alimentos y las calorıas diarias mınimas para estar suficientemente nutrido. Se considera que si en un d´ıa no llega a ese valor, entonces es dıa de hambre. Si lo supera es dıa de abundancia. Un periodo de hambre es una cantidad de dıas seguidos, todos de hambre, y analogamente un periodo de abundancia. El programa escribir´a en pantalla la duracion del periodo de hambre mas largo El programa tendrá obligatoriamente al menos otra funcion ademas de main, con un trabajo repartido en partes similares y con paso de argumentos. Ejemplo: Si son 3 alimentos, el mınimo de calorıas son 35 y el fichero “comidas” tiene: 15 12 25 20 14 7 5 23 1 0 2 18 19 21 15 5 1 2 2 2 1 0 1 1 2 18 24 21 20 26 14 12 10 Entonces el periodo de hambre m´as largo es de 3 d´ıas (del 6 al 8). Aspecto en pantalla Numero de alimentos: 3 Minimo de calorias: 35 Hambruna mas larga: 3 dias
Este es mi codigo: #include<stdio.h> #include<stdlib.h>
void ciclo(FILE *fichero, int minimo,int alimentos, int *variable){ int dias, hambre, i, comida, calorias, contador; contador=0; *variable=0; hambre=0; i=0; while(!feof(fichero)){ calorias=0; for(i=0;i<alimentos;i++){ fscanf(fichero,"%i", &comida); calorias=calorias+comida; } if(calorias<minimo){ hambre=hambre+1; } else { contador=hambre; hambre=0; } if(hambre>contador){ *variable=hambre; } } }
void main(int variable){ FILE *fichero; fichero=fopen("comidas.txt", "r"); int minimo, alimentos; printf("Introduce la cantidad de alimentos:\n"); scanf("%i", alimentos); printf("Introduce el minimo de calorias:\n"); scanf("%i", minimo); ciclo(fichero,minimo,alimentos,&variable); printf("Hambruna mas larga: %i\n", variable); system("pause>>null"); }
|
|
|
En línea
|
|
|
|
85
|
No entiendo de que se trata tu programa pero así como te lo paso anda.´ comidas.txt 111 222 333 444 555
#include<stdio.h> #include<stdlib.h> void ciclo(FILE *fichero, int minimo,int alimentos, int *variable){ int dias=0, hambre, i, comida, calorias, contador; contador=0; *variable=0; hambre=0; i=0; while(!feof(fichero)) { calorias=0; for(i=0;i<alimentos;i++){ fscanf(fichero,"%i", &comida); printf("%d %d %d\n",comida,alimentos,i); system("pause"); calorias=calorias+comida; } if(calorias<minimo){ hambre=hambre+1; } else { contador=hambre; hambre=0; } if(hambre>contador){ *variable=hambre; } } } int main(int variable){ FILE *fichero; fichero=fopen("comidas.txt", "r+"); if(!fichero){ puts("No existe el fichero!\n"); system("pause"); //return 0; fichero=fopen("comidas.txt", "w"); if(!fichero){ puts("No se ha creado el fichero!\n"); system("pause"); return 0; } fclose(fichero); fichero=fopen("comidas.txt", "r+"); } int minimo, alimentos; printf("Introduce la cantidad de alimentos:\n"); scanf("%i", &alimentos); alimentos = 5; printf("Introduce el minimo de calorias:\n"); scanf("%i", &minimo); ciclo(fichero,minimo,alimentos,&variable); printf("Hambruna mas larga: %i\n", variable); fclose(fichero); system("pause"); return 0; }
|
|
« Última modificación: 5 Abril 2013, 01:28 am por 85 »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Buenas noches, soy principiante en programación en C y al hacer este problema me compila pero el programa deja de funcionar. Os adjunto el enunciado del ejercicio y mi código. Errores en el programa hay varios. * En la función main hay que cambiar su definición a "int main(void) ...", indicar su valor de retorno con al menos "return 0;" y colocar a "variable" como una variable local a esa función. * En la misma función en las dos llamadas a scanf falta el operador "dirección de" (el '&'). * En la función "ciclo" el problema principal se debe al uso de cuatro variables para obtener el máximo cuando basta con solo tres (hay que eliminar del calculo y del programa a la variable contador). También hay que eliminar la variable "dias" ya que no se utiliza. * En esa misma función vas a tener problemas debido al uso de la función feof, la solución mas facil pero no la mejor es utilizar la cadena de formato "%i " con fscanf (esa cadena tiene un espacio al final y es critico). El programa con las correcciones: #include <stdio.h> #include <stdlib.h> void ciclo (FILE *fichero, int minimo, int alimentos, int *variable); int main(void) { FILE *fichero; int variable; int minimo, alimentos; fichero = fopen ("comidas.txt", "r"); printf ("Introduce la cantidad de alimentos:\n"); scanf ("%i", &alimentos ); printf ("Introduce el minimo de calorias:\n"); ciclo (fichero, minimo, alimentos, &variable); printf ("Hambruna mas larga: %i\n", variable ); return 0; } void ciclo (FILE *fichero, int minimo, int alimentos, int *variable) { int hambre, i, comida, calorias; *variable = 0; hambre = 0; i = 0; while (!feof (fichero ) ) { calorias = 0; for (i = 0; i < alimentos; i++) { fscanf (fichero , "%i ", &comida ); calorias = calorias + comida; } if (calorias < minimo) hambre = hambre + 1; else { if (hambre > *variable) *variable = hambre; hambre = 0; } } }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
cantabria1234
Desconectado
Mensajes: 3
|
Muchas gracias por las respuestas y estoy aprendiendo de los errores, pero el programa sigue sin funcionar Un saludo.
|
|
|
En línea
|
|
|
|
85
|
deberías postear el código actualizado, y hacerlo dentro de las etiquetas correspondientes que son las de C++. Fijate en las opciones para el armado del post. y un extra sería si podés hacer que el código compile en algún compilador online, por ejemplo este; http://www.compileonline.com/compile_cpp_online.phpasí es más fácil ayudarte. Saludos
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
estoy aprendiendo de los errores, pero el programa sigue sin funcionar Con solo eso no es posible ayudarte. Mejor sigue la recomendación de 85: deberías postear el código actualizado, y hacerlo dentro de las etiquetas correspondientes Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
|
|