Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - MAFUS

#781
Supongo que animal tendrá un campo fecha para marcar su nacimiento y un campo fecha para marcar su muerte. Pues dado un año recorre todos los animales y suma todos los que el nacimiento coincide con ese año y por otra parte suma a todos los animales que murieron ese año.
#782
A parte del estándar de C, para saberlo manejar en su extensión (es más como el manual de un coche, no te dice cómo conducir pero sabrás manejar todos los extras), te recomiendo el libro Prentice Hall - Expert C Programming. Deep C Secrets qué es como un libro de autoescuela (te nombra lo básico de un coche pero te dice como llevarlo por la carretera).
#783
Limpia el buffer de entrada poniendo después del scanf
while(getchar()!='\n');
#784
Prueba con esto. Aviso que uso Linux Mint Mate 18.1 y no lleva xterm por defecto (y ahora me da un poco de pereza instalarlo), así que no sé que tal ira.

#define _XOPEN_SOURCE

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
#include <time.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>

void sig_handler(int signo)
{
   time_t rawtime;
   
   time(&rawtime);
   printf("PADRE.SIG_HANDLER: Hora actual es: %s", ctime (&rawtime));
}

void hilo_hijo() {
   pid_t ppid;
   pid_t pid;
   int terminal;
   char argumentos[255] = "-S";
   
   terminal = open("dev/ptmx", O_RDWR | O_NOCTTY);
   grantpt(terminal);
   unlockpt(terminal);
   dup2(0, terminal);
   dup2(1, terminal);
   dup2(2, terminal);
   strcat(argumentos, ptsname(terminal));
   pid = fork();
   if(pid == 0) {
       execl("xterm", argumentos);
       exit(0);
   }
   
   ppid = getppid();
   printf("HIJO: Mi padre PID=%d.\n", ppid);
   printf("HIJO: Voy a enviar un mensaje a mi padre...\n");
   kill(ppid, SIGUSR1);
   printf("HIJO: Hora de terminar.\n");
}

void hilo_padre(pid_t pid_hijo) {
   printf("PADRE: Programa hora ejecutandose. Mi hijo PID=%d.\n", pid_hijo);
printf("PADRE: Listo para recibir la señal SIGUSR1.\n");
signal(SIGUSR1, sig_handler);
wait(NULL);
   printf("PADRE: Hora de terminar.\n");
}

int main() {
pid_t pid;
   
pid = fork();
   
   switch(pid) {
       case -1:
           printf("ERROR: No se pudo generar el hilo\n");
           break;
       
       case 0:
           hilo_hijo();
           break;
       
       default:
           hilo_padre(pid);
           break;
   }
   fflush(stdout);
}
#785
Tienes unos cuantos errores mínimos para pulir y tal, pero el que no te deja hacer funcionar la aplicación como debería es en main:

int main(){

        while(1){// Funcion que forma un ciclo hasta que el usuario ordene romperlo.

    Lista miLista;


A cada iteración del bucle la lista se genera de nuevo, por tanto siempre estará vacía. Declara primero la lista y después entra en el bucle.

#786
Y la última llave te sobra.
#787
A parte de unos problemas con punteros. sel, dentro de la función presentación no está bien manejado y aunque se tratara bien el valor es indeterminado porque no se ha inicializado.
#788
De seguro que has pensado en la solución pero la has descartado por demasiado complicada. Algo así cómo:
CitarTengo que capturar una frase desde el teclado y debo mirar si todo son números. Si lo son tengo que ver si esos números están entre el máximo y mínimo que me da el usuario y si no dar un error.

El enunciado de la idea te da la solución.
1. Capturas la frase
2. Te mueves carácter por carácter para ver si es un dígito (ya has usado isdigit). Si todo son dígitos continuas con el punto 3, sino marcas error y sales.
3. Transformas la cadena a un número. Con sscanf (las dos eses no son un error) lo conseguirás.
4. Compruebas que están entre los límites.
#789
La comprobación que haces para comprobar si la respuesta es mayor de 50 caracteres no es necesaria pues fgets nunca te dejará introducir más caracteres que los que les marcas.

if((0<=p<=10 && isdigit(p))esto está mal pues los números se guardan en ASCII no literales, por tanto 0<=p<=10, además de ser una construcción lógica mal hecha en C no comprobará lo que buscas. Deberías usar funciones que comprobaran cadenas, como strcmp.
#790
El contenido de dos cadenas por array de char no se comparan con el == sino con la función strcmp