elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Porque no funciona?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Porque no funciona?  (Leído 4,611 veces)
dgg006

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Porque no funciona?
« en: 19 Octubre 2011, 14:15 pm »

Hola.
Tengo este codigo:
Código:
#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


En línea

satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Porque no funciona?
« Respuesta #1 en: 19 Octubre 2011, 16:50 pm »

Hola

Prueba con
Código
  1. char resul[20];
  2.  

En la linea 25
Código
  1. fscanf (hora, "%s", resul);

Y en la 38
Código
  1. if (strcmp (times(), resul) == 0)

A ver si así funciona

Saludos


En línea

Breakbeat como forma de vida
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Porque no funciona?
« Respuesta #2 en: 19 Octubre 2011, 16:52 pm »

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.
En línea

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

Desconectado Desconectado

Mensajes: 83


Ver Perfil
Re: Porque no funciona?
« Respuesta #3 en: 21 Octubre 2011, 01:50 am »

el problema que apresio claramente es

Código:
fscanf (hora, "%s",&resul);


sabiendo que resul es:
Código:
char resul;

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

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

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Porque no me funciona este codigo
Programación C/C++
0xDani 3 3,293 Último mensaje 11 Junio 2012, 00:40 am
por 0xDani
¿Porqué no funciona? [HTML5/CSS3]
Desarrollo Web
Puroguramu 6 4,154 Último mensaje 6 Noviembre 2012, 16:16 pm
por Puroguramu
¿Porque no funciona? codigo vb6
Programación Visual Basic
RuniksFelipez 1 1,542 Último mensaje 20 Noviembre 2012, 23:28 pm
por Elemental Code
XmlDocument.LoadXml ¿Porque no me funciona?
.NET (C#, VB.NET, ASP)
Eleкtro 3 2,702 Último mensaje 18 Diciembre 2012, 22:51 pm
por Novlucker
[CSS] ¿Porque no funciona?
Desarrollo Web
Ori-chan 5 2,982 Último mensaje 24 Enero 2013, 16:38 pm
por Ori-chan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines