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

#41
Como ya mencionaron si pasas un puntero NULL y un tamaño distinto a cero a realloc se comporta como malloc es decir reserva memoria. El cast antes de malloc y realloc es innecesario el puntero void* es convertido automáticamente al tipo adecuado.
#42
Cita de: AlbertoBSD en 24 Mayo 2016, 02:54 AM
Yo estoy con que la asignacion es totalemente valida.

Con el codigo que el presento solo es necesario modificatr el printf esta es otra version valida.

Te invito a leer la página que proporcioné mas arriba al parecer no tomaste tiempo en leerlo, esa asignación provoca comportamiento indefinido por lo tanto no existe garantía de que el resultado sea lo esperado. Compila ese código con el nivel de advertencia -Wall luego me cuentas
#43
Código (cpp) [Seleccionar]
arr[i++] = i;

La variable i se está modificando en el lado derecho de la asignación y tambien se hace referencia a ella en la izquierda el estándar de C no permite esto porqué no hay punto de secuencia para mas info http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points
#44
Cita de: NOB2014 en 12 Mayo 2016, 23:59 PM
Geeke, lo tuyo no me funciona, ya lo había probado y cuando quiero hacer un bucle para demostrar que los 5 elementos contienen ceros, me muestra un solo cero. -

Si usas el especificador %c sólo imprimirá espacios porque el contenido del array es 0 == '\0' != '0' el carácter null generalmente se representa mediante un espacio, pero si cambias el especificador a %d se imprimirán los ceros

Por ultimo en estos casos es preciso ser especificos porque podria surgir ambiguedades, tal como vemos en este caso, el cero tiene diferentes significados esto dependiendo del contexto donde se lo usa.
#45
Si en verdad quieres evitar los bucles puedes:

char cadena[10] = "";

El cual es equivalente a

char cadena[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
#46
Si usas conio.h dispones de kbhit()

Código (cpp) [Seleccionar]
if (kbhit())
{
    // Se presionó una tecla
}


Cabe destacar que conio.h no es estándar ni tampoco portable
#47
Los caracteres '0' y '1' son equivalente a:

48 en base 2: 110001
49 en base 2: 110000

El primero tiene el bit 1 a cero, el segundo no al realizar c & 1 la expresión resulta en 1 si el carácter es '1' y 0 si el carácter es '0'.

Y de paso otra aproximación en C  :rolleyes:

#include <stdio.h>

int main(void)
{
    int m = 1, n;
    while (1)
    {
        scanf("%*[0]");
        scanf("%*[1]%n", &n);
        if (n > 0)
        {
            m *= n;
            n = 0;
        }
        else
            break;
    }
    printf("%d\n", m);
    return 0;
}
#48
Otro enfoque en C++
Código (cpp) [Seleccionar]

#include <iostream>

int main()
{
    int c, m = 1, v = 0;

    for(; (c = std::cin.get()) != '\n'; v += c & 1)
        if( v && c == '0' && std::cin.peek() == '1' )
        {
            m *= v;
            std::cout << v << '*';
            v = 0;
        }
    std::cout << v << " = " << (m *= v);
}
#49
Tampoco es que no se pueda lo que podríamos hacer en este caso es crear una clase donde el constructor contega un cout y luego crear un objeto global del mismo, momento en el cual se llama al constructor imprimiendose el mensaje

Código (cpp) [Seleccionar]

#include <iostream>

class print
{
public:
   print()
   {
       std::cout << "Hola Mundo";
   }
}s;

int main ()
{

}
#50
Si pero hay que tener cuidado con esta, porque no comprueba el limite del buffer por lo tanto fácilmente podríamos escribir mas allá de lo permitido (desbordamiento de buffer). Esto no pasaría con snprintf porque tiene un parámetro adicional que índica el numero máximo de bytes a escribir