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

#1631
Cita de: DeIMachine en  8 Noviembre 2015, 20:01 PM
He ido recortando el codigo y todavia no he encontrado la respuesta, ahora en vez de cambiarme ha  1 me lo cambia a 0 exactamente con esto.
Lo estoy repasando y repasando pero es que no hay nada, ya me estoy desquiciando jajaj, el programa empieza con la funcion void leer recibe la variable h, despues de obtenerla la imprimo en el main y me pone que es 0, es que no se que se me pasa por alto si realmente es muy pequeño el codigo y no toco na.
Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

void leer(int h){
    cin >> h;
   
}





int main(){
    int h;
    leer(h);
    cout<<h;
   
    return 0;
}   


Bien,ahí el problema es que le pasas el valor de la variable h a la función. Pero si la función modifica su propia variable h, esa modificación no va a afectar a fuera de la función. Coloca:

Código (cpp) [Seleccionar]

void leer(int* h){
    cin >> h;
}
...
leer(&h);

o
Código (cpp) [Seleccionar]

void leer(int& h){
    cin >> h;
}
...
leer(h);


De estas maneras, le pasas una referencia a tu variable "h" de main, así la función puede modificar <tu> variable, y no su variable. El tema de punteros y memoria ya lo verás si no lo viste aun.
#1632
Bien, entonces sabes una cosa, y es que llemas a la función enviándole un 1 como primer parámetro. Eso significa que el problema viene de antes. Revisa dónde la llamas, y revisa si a la variable que le pasas como parámetro le asignas el valor correctamente.
#1633
En la misma función, haz un cout antes del if, para comprobar si h es el número correcto.
#1634
ostream::write escribe bytes, cogiendo como fuente el puntero del primer argumento, y escribe tantos bytes como le envías en el segundo argumento.
Olvídate del caracter nulo. El caracter nulo solo sirve para texto. No estás trabajando texto, el caracter nulo no existe ya para ti. No son caracteres lo que escribes, son datos, son bytes, y la forma que tienen los métodos y funciones de saber el tamaño de los bufferes que les pasas, es dándoselo tú.
#1635
El write en un archivo binario, escribe todos los bytes que le envíes. Para más información, consulta los métodos en una referencia de C++.
#1636
Cita de: Kaxperday en  8 Noviembre 2015, 12:14 PM
Buenas socio, me recomiendas usar fwrite y fread para trabajar con bytes en C++, ¿o conoces algo mejor?.

Por lo que has dicho, ¿esto no se cortaría?:

Código (cpp) [Seleccionar]
string cadena = reinterpret_cast<char*>(_datos.contenido);
archivo.write(cadena.c_str(), cadena.size());


?? Saludos.

Estás construyendo mal la string. Estás construyendola pasándole solo un char*.

Citarstring tiene un constructor que recibe como primer parámetro el puntero a char, y como segundo parámetro la longitud de la cadena. Es uno de los constructores posibles cuando se trabaja con cadenas de datos binarios.

#1637
A mi me pasa al revés, si estoy jugando y se me ocurre algo, me engancho a programar xD
Todo depende de tus prioridades y tu fuerza de voluntad. Pero realmente, si te interesa más otras cosas que programar, ¿realmente quieres programar?
La primera pregunta es: ¿por qué hacer algo sabiendo que hay cosas que te entretienen más?
Otra pregunta es: ¿hay algo que te motive a programar?

Si no encuentras una respuesta a ambas preguntas, siempre puedes darleu n tiempo, hasta que obtengas las respuestas xD
#1638
Cita de: #!drvy en  7 Noviembre 2015, 18:03 PM
A parte del marketing, costumbres, cultura, lenguaje y traducciones literales, esta el cuando no tienes nada mejor que poner y lo traduces como puedas.

http://www.imdb.com/find?q=como%20puedas&s=tt&ref_=fn_al_tt_mr


Saludos

Gran parte de esas son de la misma ""saga"", donde todas se llaman así xD
Parece que a los que tradujeron esas películas les gustó lo de "... como puedas". Y admitámoslo, queda bien. Siempre que lee un "... como puedas", un español piensa en una película de comedia de ese actor xD
#1639
Incluso en C, ese código es incorrecto.
Los primeros 2, como dice el compilador, es porque tratas de guardar un valor void* (que es lo que retorna malloc y calloc), en punteros de otro tipo. Tienes que hacer una conversión explícita:
MiValor = (unsigned char*)malloc(MiValor_LEN)

El tercero y cuarto dicen: la expresión debe ser un valor L modificable. valor L, con L de Left. Los operadores binarios tienen 2 elementos: el izquierdo L, y el derecho R. L = R;. El izquierdo L, en caso de asignaciones, no puede ser una constante. En el código tienes: 3 = MiValor3. "3" es uan constante numérica, no le puedes asignar otro valor.

Olvidando esos errores: En esos if, no estás haciendo comparaciones si es lo que pretendías hacer. Estás haciendo asignaciones. No confundas la asignación "var = 5", con la comparación "var == 5".
#1640
Eliminar una fila implica sobreescribir todo lo que está desde el primer caracter de la fila a eliminar.

Así que tienes varias opciones. Una, es la que comentas. Otra, es volcar los contenidos del fichero a otro archivo temporal, y reescribir el fichero inicial.
Para evitar copiar datos 2 veces, puedes crear el nuevo arhcivo, eliminar el antiguo, y cambiar el nombre del nuevo. Pero ahí ya tendrás que hacer uso de librerías como boost, API del SO, u otras, para acceder al sistema de archivos (a parte de "system()").