Porque no funciona?

Iniciado por dgg006, 19 Octubre 2011, 14:15 PM

0 Miembros y 1 Visitante están viendo este tema.

dgg006

Hola.
Tengo este codigo:
#include <stdio.h>
#include <string.h>
#include <time.h>

char buffer [20];//Inicia cadena buffer
char *times ()//Inicia funcion times, que devuelve cadena de caracteres
{
        time_t now = time (0);//Hora actual
        struct tm *ahora;//Declara una variable estructurada para un valor tiempo
        ahora=localtime ((const time_t*)&now);//Extrae la hora del sistema y guarda en variable
        strftime (buffer, 40, "%H:%M-%d/%m/%Y", ahora);//Da el formato de hora "HH:MM"
        return (char *) buffer;//Devuelve la hora actual del sistema ya formateada
}
int main ()
{
        char resul;//Inicia cadena que contendrá la hora en la que se ejecutará
        int estado=-1;//Variable para evitar que se ejecute mas de una ves la acción
        int val;//Variable que contendrá si la acción es "Encender" o "Apagar"
        int disp;//Variable que contendrá el dispositivo utilizado

for (;;)//Bucle infinito para mantener el programa abierto hasta que llegue la hora
{
        FILE *hora;//Apuntador del TXT que contiene la hora
        hora = fopen ("Hora.txt","r");//Abre el TXT dentro del apuntador
        fscanf (hora, "%s",&resul);//Lee el TXT y guarda su valor en su correspondiente cadena
        fclose (hora);//Cierra el TXT

        FILE *valo;//Apuntador del TXT que contiene el valor para "Encender" o "Apagar"
        valo = fopen ("val.txt","r");//Abre el TXT dentro del apuntador
        fscanf (valo, "%d",&val);//Lee el TXT y guarda su valor en su correspondiente variable
        fclose (valo);//Cierra el TXT

        FILE *pin;//Apuntador del TXT que contiene el pin
        pin = fopen ("Pin.txt","r");//Abre el TXT dentro del apuntador
        fscanf (pin, "%d",&disp);//Lee el TXT y guarda su valor en su correspondiente cadena
        fclose (pin);//Cierra el TXT

        if (strcmp (times (),("%s", resul)) == 0)//Si la diferencia entre la hora programada y la hora actual es igual a 0, se hará lo siguiente
        {
                if (estado != 1)//Este if se encarga de que las siguientes lineas solo se ejecuten una ves
        {
                if (disp!=0)//Este if se encarga de que solo le ejecute lo siguiente cuando se haya escogido un dispositivo
        {
                FILE *artefacto;//Apuntador del TXT correspondiente al artefacto a programar
                switch(disp)//Este switch se encarga de transformar en número de artefacto en el nombre de su correspondiente TXT
                {
                case 1:
                artefacto = fopen ("Cocina.txt","w+");//Abre el TXT dentro del apuntador
                break;
                case 2:
                artefacto = fopen ("Habitacion.txt","w+");//Abre el TXT dentro del apuntador
                break;
                case 3:
                artefacto = fopen ("Bano.txt","w+");//Abre el TXT dentro del apuntador
                break;
                case 4:
                artefacto = fopen ("Luz.txt","w+");//Abre el TXT dentro del apuntador
                break;
                }
                fprintf (artefacto, "%d",val);//Escribe en el TXT el valor de la variable "val"
                fclose (artefacto);//Cierra el TXT
                FILE *pin;//Apuntador del TXT que contiene el pin
                pin = fopen ("Pin.txt","w+");//Abre el TXT dentro del apuntador
                fprintf (pin, "0");//Escribe en el TXT el valor de la variable "val"
                fclose (pin);//Cierra el TXT
        }
        }
        estado=1;//Escribe 1 en la variable para que funcione como debe el if anterior
        }
        else//De lo contrario, si hay diferencia. Se hará lo siguiente
        {
        estado=0;//Escribe 0 en la variable para que funcione como debe el if anterior
        }
}
}

Se que tiene muchos "detalles" a arreglar, pero en windows funciona perfecto y yo lo necesito para linux.
Si lo intento compilar asi, me sale este error:
prog.c:  In function 'main':
prog.c:25: warning: format '%s' expects type 'char *', but argument 3 has type 'char (*)[20]'

Para probar, borré el [20], y ahora sale este error:
prog.c:  In function 'main':
prog.c:38: warning: passing argument 2 of 'strcmp' makes pointer from integer without a cast
/usr/include/string.h:143: note: expected 'const char *' but argument is of type 'char'

Estoy necesitando esto urgente, porque es parte de un proyecto y no entiendo porque diablos no funciona.

Porfavor, Porfavor, Porfavor
Alguien puede darme una mano para que compile en ubuntu?
Gracias

satu

Hola

Prueba con

char resul[20];


En la linea 25
fscanf (hora, "%s", resul);

Y en la 38
if (strcmp (times(), resul) == 0)

A ver si así funciona

Saludos
Breakbeat como forma de vida

Eternal Idol

Un warning no es un error, es una advertencia.

Pone resul como estaba (como un array del mismo tamaño que buffer) y saca el ampersand que esta antes de resul en la linea 25.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

dewolo

el problema que apresio claramente es


fscanf (hora, "%s",&resul);



sabiendo que resul es:
char resul;

al tratarse de un char el formato debe ser con "%c" y no "%s" que es para strings
Citarfscanf (hora, "%c",&resul);

pero aparte de eso no lo mire al programa.. solo asi superficialmente