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

#281
En google hay un montón de información sobre eso. Básicamente sirve para crear funciones que no tienen un número de parámetros fijos. El ejemplo más claro es la función printf.

Para declarar una función con un número de parámetros variable, hay que usar los 3 puntos:

Código (cpp) [Seleccionar]

void function(int numParametros, ...)


Y aquí tienes un pequeño ejemplo que hice:

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdarg.h>


void funcion(int numParametros, ...)
{
va_list list; //variable de tipo va_list

va_start(list, numParametros); //iniciamos la lista de parametros y le pasamos el número

for (int i = 0; i < numParametros; i++) //recorremos la lista
{
char * buffer = (char*)va_arg(list, char *); //obtenemos los parámetros de izquiera a derecha
puts(buffer); //escribimos
}

va_end(list); //limpiamos la lista
}

int main(int argc, char * argv[])
{
funcion(3, "hola", "que tal", "esta es una funcion con parametros");
getchar();
return 0;
}


Si te fijas, a la función va_arg le especifico que quiero obtener un parámetro de tipo char*, puedes especificar otros como int, double, etc..

La función printf para obtener el número de parámetros lo que hace es contar el número de % que se le pasa en la primera cadena y según la letra que le preceda obtiene de la lista un int, double, char*. En esta función de ejemplo, necesitamos especificar cuantos parámetros le pasamos.

http://www.cplusplus.com/reference/clibrary/cstdarg/va_arg/

Saludos.
#282
Programación C/C++ / Re: ahorcado
17 Junio 2011, 23:01 PM
Cita de: Don Pollo en 17 Junio 2011, 15:57 PM
No me he podido parar a leer detenidamente el post que has comentado, Khronos14, así que, qué se supone que hice que no debería haber hecho? Quizá un uso excesivo de fflush?

A parte de eso, no es recomendable usar scanf. Si no lo usaras, no tendrías que hacer un fflush. El código es bastante desordenado, la función main no hay por donde cogerla, te pierdes mucho.

Para las condiciones y los bucles, si son de una sola línea no hace falta poner llaves.

Saludos.
#283
Programación C/C++ / Re: ahorcado
17 Junio 2011, 02:07 AM
#284
Si, la condición anidada es mejor. Pero yo haría otra cosa antes de hacer la condición: convierte la cadena a minúsculas o mayúsculas y así te ahorras muchas condiciones.

Saludos.
#285
Código (csharp) [Seleccionar]

private void Recursiva(ref int [,] matriz, int x, int y)
       {
           if (x >= 0 && x < matriz.GetLength(0) && y >= 0 && y < matriz.GetLength(1))
           {
               matriz[x, y]++;

               if (x == matriz.GetLength(0) - 1)
               {
                   x = 0;
                   y++;
               }
               else
                   x++;

               Recursiva(ref matriz, x, y);
           }
       }


Me parece una función recursiva bastante simple.

Saludos.
#286
No dices en que lenguaje así que te lo pongo en Pascal:

Código (delphi) [Seleccionar]

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
x, y: integer;
Matriz: array [0..9, 0..9] of integer;
begin

for x := 0 to 9 do
  for y := 0 to 9 do
    begin
      if Matriz[x, y] = 14 then
        //Hacemos algo...
    end;
end.


Es un bucle dentro de otro, así que recorrería todos los elementos de la matriz..

Saludos.
#287
Programación C/C++ / Re: C ¿Windows?
6 Junio 2011, 22:44 PM
Cita de: x4cks en  6 Junio 2011, 15:44 PM
Perdon alejandro magno , que no sepa escribir correctamente , usted me podria dar una clase ?
¬¬ si vas a dar un comentario como ese mejor no lo hagas.

Akai gracias por tu comentario.

Si no sabes expresarte, la gente no te va a tomar en serio y muchas veces va a pasar de ti.

El fallo de programar en GNU/Linux es el entorno de desarrollo, ninguno le llega a la suela del zapato al Visual Studio, Delphi o C++ Builder.. Bueno, está MonoDevelop, pero aún le queda mucho que madurar..

PD: Te escribo desde mi Debian Squeeze..

Saludos.
#288
Programación C/C++ / Re: C ¿Windows?
6 Junio 2011, 14:31 PM
A parte de lo que dijo Akai, aprende a escribir como dios manda.

"que veneficio hay?" Aquí me sangraron los ojos...
#289
No dices para que sistema operativo, así que supongo que se trata de Windows. Tienes 3 funciones de la API de Windows para ejecutar un programa: CreateProcess, WinExec y ShellExecute. En msdn tienes mucha información sobre ellas y como utilizarlas.

Otra opción es utilizar la función de C system(), que se encuentra en stdlib.h.

Saludos.
#290
Hola, estoy haciendo un proyecto en C# y C++ con el Visual Studio. La interfaz está hecha en C# y el "corazón" del programa está en una librería hecha en C++.

Código (cpp) [Seleccionar]

#include <Windows.h>
//#include "core.h"
#include <curl/curl.h>

extern "C" __declspec(dllexport) int StartXModule();

BOOL APIENTRY DllMain( HANDLE hModule,
                        DWORD  ul_reason_for_call,
                        LPVOID lpReserved )
{
    return TRUE;
}


int StartXModule()
{
curl_global_init(CURL_GLOBAL_DEFAULT);
return 0;
}


La llamada de la función desde C# se hace aquí:

Código (csharp) [Seleccionar]

[DllImport("x-module.dll")]
        private static extern int StartXModule();

        private void FMain_Load(object sender, EventArgs e)
        {
            PMain.BackColor = System.Drawing.ColorTranslator.FromWin32(0x00373737);
            //for (int i = 0; i < 30; i++)
            //    listBoxX1.Items.Add("qdwqdqw");
            StartXModule();
        }


Depurando desde el Visual C# la aplicación se ejecuta correctamente, pero generando la aplicación y ejecutando directamente me da este error:

No se puede cargar el archivo DLL "x-module.dll". No se puede encontrar el módulo especificado. (Excepción de HRESULT: 0x8007007E).

Mi aplicación la forman 2 librerías (libcurl.dll y x-module.dll) y la aplicación hecha en C#. El problema creo que está en que no tiene acceso a la función curl_globla_init() llamando a StartXModule() desde C#, porque si comento esa línea, la función se carga correctamente.

Espero que me podáis ayudar.. Saludos.