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 - Fire544

#21
Avesudra: Claro tienes razon, pero fijate en el siguiente post, donde recorro todos los elementos, de un array que ya he concatenado. Y no estas correcto cuando dices que no recorro los argv[]; ten en cuenta que estas accediendo a punteros de caracteres no a caracteres en un array de chars, pero como quiera fijate donde hago referencia a lo que dices.

Cita de: Fire544 en 26 Agosto 2012, 20:30 PM
Mira ALONSOQ puedes optar por concatenar los elementos de argv[] a variables chars de cualquier tamaño y luego verificar que cada posicion de este vector este en un rango de 65 >= 97 que son las posiciones del alfabeto en la tabla ASCII !!!

Mira algo como esto !!!


char arrays[10];

strcpy(array, argv[1]);
for(int i=0; i<argc; i++)
{
if(argv[1]!=0)
{
if(array[i]>=65&array[i]<=97)
{
printf("Es una cadena\n");
}
}
}


A si puedes hacer con la posicion 2 de argv[] y listo, no he probado el codigo pero creo que no tendras problemas !!

Suerte !!  :xD
#22
Hola a todos !!. estuve un poco calladito con lo de los GUIs con SDL, pero ya estoy aqui nuevamente, ahora vengo con algo muy sencillo solo quiero que opinen al respecto, y claro critiquen. Es un menu algo clasico y poco modelado solo para probar nomas.

Nota: Esta desarrollado en un entorno Dev-c++, Windows XP, solo tienen que ejecutar, no he dejado los sources, porque es algo de prueba sin terminaciones ni nada, solo quiero sus opiniones y criticas ....

Aqui les dejo el link:
-------------------------------------------------------------------------------------
http://uploading.com/files/get/852beemc/Menu_GUI_C_SDL.rar
-------------------------------------------------------------------------------------
Suerte !!!  ;-)
#23
Hola Zelandya, mira lo primero es saber cuales datos vas a manejar, en tu caso una lista, lo segundo seria que tipo, dices enlazada, ps ahi tienes algo similar pero con muchos errores, a ver te corrigo: Es correcto hacer struct nodo{...}my_nodo;, pero no recomendado, lo mas factible seria un typedef struct nodo{}; nodo my_struct;, y recuerda dependiendo de tus necesidades es que trabajaras con listas tipo dinamicas o estaticas, tambien recuerda inicializar todo puntero a NULL en su declaracion es muy buena costumbre.!!!

Mira ejemplo:



typedef struct nodo{
       int valor;
       struct nodo *sig;
       };

nodo *primero=NULL;

nodo *add_nodo(nodo *nuevo, int val)
{
    nuevo=(struct nodo*)malloc(sizeof(nuevo));
   
    if(nuevo!=NULL)
    {
                   nuevo->valor=val;
                   nuevo->sig=NULL;
                   }
                   
                   if(nuevo->sig==NULL)
                   {
                                       nuevo->sig=primero;
                                       primero=nuevo;
                                       }
                                       return nuevo;
    }

nodo *ver_nodo()
{
    nodo *ver_lista=primero;
   
    while(ver_lista!=NULL)
    {
                          printf("%i", ver_lista->valor);
                          ver_lista=ver_lista->sig;
                          }
                          return ver_lista;
    }
       
int main(int argc, char **argv)
{
   nodo *data=NULL;
   
   add_nodo(data, 6);
   add_nodo(data, 4);
   add_nodo(data, 0);
   add_nodo(data, 1);
   add_nodo(data, 7);
   add_nodo(data, 0);
   add_nodo(data, 1);
   
   ver_nodo();
 
   }


Suerte !!  :xD
#24
Cita de: ALONSOQ en 29 Agosto 2012, 17:19 PM
Vale, ya lo he entendido, los argumentos al programa se le pasan a traves del compilador dengtro del propio menu ejecutar/parametros ejemplo: 2   hola
argv[1] 2
argv[2] hola

El codigo es este:

int main(int argc, char* argv[])
{
    int i;
   
  printf("Numero de argumentos: %i\n", argc);
  printf("Nombre del programa: %s\n", argv[0]);
  for(i=1;i<(argc); i++)
   {
     
printf("Argumento numero %i: %s\n", i, argv[i]);

printf("prueba");
   }
  system("pause");
}


ahora solo faltaría que el programa verifique que el primer argumento es un numero, y el segundo una cadena ¿ alguna ayuda con esto?

gracias

Para la proxima trata de leer bien las respuestas, en la primera respuesta que te doy, puedes hacer mucho con lo que te paso, pero no importa como quiera te paso algo mas correcto y mas entendible !!!.

Aqui tienes una solucion correcta y factible mira, si no comprendes algo postea, pero fijate con el mismo procedimiento (subrutina/funcion) evaluo los dos casos !!


int verificaCadena(char *cadena)
{
//si es mayor o igual a (a) y si es menor o igual a (z)
//entonces es numero sino
//entonces retorna 1 con lo que es cadena !!
    if(*cadena>=48&*cadena<=57)
    {
                               return 0;
                               }
   
    return 1;
    }
   
int main(int argc, char **argv)
{
    //se verifica que en la posicion 1 de tu argumento contenga valores
    //igual pasa con la posicion 2 ya que la posicion 0 no se toca porque es
    //el nombre de tu main.exe y no es lo que se quiere aqui !!!
    if(argv[1]!=0&&argv[2]!=0)
    {
//evaluo la posicion 2 y 1 en busca de elementos, y a si verifico si son correctos
                           if(verificaCadena(argv[2])==1&&verificaCadena(argv[1])==0)
                           {   
                           printf("Son Correctos (Numero y Cadena)!!");
                           }
                           }
    else
    {
        printf("No son Correctos");
        }
        } 


Listo espero que tengas Suerte !!  ;-)
#25
Cita de: fabianjsm en 27 Agosto 2012, 01:49 AM
Para utilizar una librería, no debes incluir todos los archivos de cabecera de las funciones que esta requiere internamente. No estas incluyendo windows.h para abrir sockets porque no los estas utilizando, no porque haya leído todo tu código fuente, sino porque asumo que lo has compilado antes de subir, el código compila correctamente, sino no lo subirías. Lo compilaste en Windows, por eso el include <windows.h>. Si estuvieras utilizando sockets en Windows deberías haber incluido el archivo de cabeceras para trabajar con ellos: winsock.h.

Probablemente sin "windows.h" no puedas compilar, pero lo aconsejable para compilar un cliente MySQL en Windows es que incluyas my_global.h, no windows.h directamente. http://dev.mysql.com/doc/refman/5.0/es/windows-client-compiling.html

Hey BlackZeroX (Astaroth) tienes mucha razon, si claro utilizo la libreria windows.h por el hecho de compilar en windows, lo que pasa es que windows.h hace llamadas a my_global.h muy buena la aclaracion, gracias BlackZeroX (Astaroth) !!  ;-)
#26
Cita de: fabianjsm en 26 Agosto 2012, 23:16 PM
Estimado, lo escribo con ánimo de disipar la confusion.

No comprendo a que se refiere con manejar datos muy largos de MySQL con %c. El especificador de formato "%c" indica que el parámetro debe ser tratado como char, y la biblia del C (K&R 2.2, tipos y tamaños de datos) dice que el char tiene el tamaño de byte, por ende eso es lo máximo que podrás menejar con %c, o ¿Puedes citar alguna arquitectura para la cual se implementó un compilador C con tipos de datos char de más de 8 bits?

Por otra parte, C no puede manejar automaticamente los tipos datos DATE de MySQL. C trabaja con tipos de datos básicos. Demás esta esta aclaración, pero puede ser utilidad: En Unix y demás sistemas POSIX (probablemente en muchos otros sitemas no POSIX), time_t (tiene el mismo nombre en la libreria estándar del C) es un entero que representa la cantidad de segundos transcurridos desde la medianoche UTC del 1 de enero de 1970 sin contar los segundos itercalares (http://es.wikipedia.org/wiki/Segundo_intercalar). Por ejemplo, el viernes 13 de febrero de 2009, exactamente a las 23:31:30 (UTC), el tiempo Unix se igualó a '1234567890' (Google celebró este momento con el doodle: "date +%s"). El formato de fecha y hora de MySQL es una cadena que sigue cualquiera de estos esquemas: YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, o YYMMDD. Puedes utilizar las funciones UNIX_TIMESTAMP() y FROM_UNIXTIME() para convertir entre valores TIMESTAMP de MySQL y los de Unix.

Utilizando tu ejemplo:

char fecha[20];
time_t now = time(NULL);
strftime(fecha, 20, "%Y-%m-%d %H:%M:%S", localtime(&now));
sprintf(consulta, "INSERT INTO nametable VALUES(%s)", fecha);

No no mira creo que estas erratico, tienes que poner mas atencion a tu lectura, en ningun momento hable de chars larrgo en un sentido de que soporte mas bytes, solamente que no puedes hacer que un vector de 50 o 20 bytes se pueda concatenar con un char de 8 bytes, que es lo que pasa en el caso de txenfsm. Solo eso quiero dejar claro, sino preguntale a txenfsm que si que le funciono ...
#27
Cita de: fabianjsm en 26 Agosto 2012, 23:16 PM
Muy buen aporte!

Solo realizar esta aclaración: Dev-c++ no es un compilador, es un IDE, probablemente estes compilando con MinGW (podrías estar utilizando otro port como djgpp, o gcc sobre Linux, pero no lo creo en principio por el include <windows.h>... sin entrar en detalles, la explicación de porque la incluyes tampoco es correcta). Del sitio oficial: Bloodshed Dev-C++ is a full-featured Integrated Development Environment (IDE) for the C/C++ programming language.

La explicacion de porque la incluyo no es completa pero si correcta, entonces como ara las llamadas a winsock ? entiendo lo que quieres dejar dicho, pero Si claro Dev-c++ es un IDE Entorno de desarrollo eso esta claro, y claro que compila con GCC !!
#28
Mira ALONSOQ puedes optar por concatenar los elementos de argv[] a variables chars de cualquier tamaño y luego verificar que cada posicion de este vector este en un rango de 65 >= 97 que son las posiciones del alfabeto en la tabla ASCII !!!

Mira algo como esto !!!


char arrays[10];

strcpy(array, argv[1]);
for(int i=0; i<argc; i++)
{
if(argv[1]!=0)
{
if(array[i]>=65&array[i]<=97)
{
printf("Es una cadena\n");
}
}
}


A si puedes hacer con la posicion 2 de argv[] y listo, no he probado el codigo pero creo que no tendras problemas !!
#29
Cita de: fabianjsm en 26 Agosto 2012, 14:28 PM
En tu IF estas comparando con valida1, no deberías comparar con contrasena?
El operador de comparación es !=, tu escribes =!.
No necesitas en "\n" en scanf, con "%d" es suficiente, lo que haces es esperar un RETURN extra.
Modificando un poco tu codigo:

Código (cpp) [Seleccionar]
    do {
        printf("Ingrese su contraseña: ");
        scanf("%d", &contrasena);
if (contrasena == valida1)
break; // sale del while
if (contrasena == valida2)
break; // sale del while
printf("Su contraseña no es valida\n");
} while(1); // vuelve al inicio del bucle
    printf("Su codigo es valido!\n");



Si tienes razon, el codigo estaba erratico porque se estaba comparando valida1 con valores constantes y nunca se cumplia la sentencia, la solucion era comparar valida1 con alguna otra variable en este caso con codigo o contraseña, que si dependian del usuario utilizador del codigo o software.
#30
Hola txenfsm. Mira he posteado tu solucion en un post ya hace algunas semanas, no es recomendable formatear una entrada en sprintf() con %c si fecha es tipo date en MySQL, tendrias que utilizar %s, porque C puede manejar automaticamente los tipos date de MySQL como strings o cadenas, lo que no puede hacer es manejar datos muy largos de MySQL con %c es algo logicamente absurdo.

Tu error puede ser por el paso incorrectos de argumentos a sprintf(), mira fijate:

Puedes hacer lo siguiente mira:

char fecha[10];

sprintf(consulta, "INSERT INTO nametable VALUES(%s)", fecha);


trata de fijarte en el post que publique mira:

http://foro.elhacker.net/programacion_cc/base_de_datos_con_mysql_desde_c_excelente-t366557.0.html

Suerte !!  :laugh: