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

#501
Hola gracias por tu respuesta.
pero deberia de funcionar con reinterpet_cast. Y lo de string no se puede guardar con una clase porque tiene memoria dinamica ? Si es asi como lo puedo guardar en un archivo?

Utilizo visual studio 2012.

Saludos

#502
Hola en este codigo:
Código (cpp) [Seleccionar]
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

class name{
    string n;
public:
    name(string N=""):n(N){}
    string getName()const{return n;}
};

int _tmain(int argc, _TCHAR* argv[])
{
    fstream file("data.dat",ios::in | ios::out | ios::binary);
    name N;
    file.seekg(0);
    file.read(reinterpret_cast<char *>(&N),sizeof(name));
    if(!file.fail())
        cout << "Good!";
    getchar();
   
    return 0;
}


Despues de ejecutar un programa para crear el archivo he insertar en el la clase name simplemente por probar porque pasa esto y ahora en este programa cuando termina creo que se ejecuta el destructor de file y me lanza un error de infraccion de acceso de memoria

Excepción no controlada en 0x51DDCCC8 (msvcp110d.dll) en Files_random_acces.exe: 0xC0000005: Infracción de acceso al leer la ubicación 0x01278B9C.


Como solucionar esto?

Saludos
#503
Programación C/C++ / Re: Recibir int seguro
10 Marzo 2014, 21:55 PM
Hola con la ayuda de sus codigos he hecho esto:

Código (cpp) [Seleccionar]
#include "stdafx.h"
#include <stdlib.h>
#include <cctype>
#include "firstTest.hpp"


int getInt(char *msg,int max,int min){
char *str=new char[max+1];
do{
fflush(stdout);
printf("%s",msg);
fgets(str,max+1,stdin);
int i=-1;
bool clean=true;
while(str[++i]!='\0'){
if(str[i]=='\n'){
clean=false;
str[i]='\0';
}
}
if(clean)getchar();
str=outFirstSpace(str);
printf("\n");


}while(*str=='\0' || !isInt(str) || getLength(str)<min);
//while(getchar()!='\n');
return atoi(str);
}

char * outFirstSpace(char *str){
int length=getLength(str);
while(*str==' ')str++;
return str;
}

bool isInt(char const * const str){
int length=getLength(str);
for(int i=0;i<length;i++){
if(!isdigit(str[i])){
return false;
}
}
return true;
}

int getLength(const char * str){
int l=0;
while(*(str++)!='\0')l++;
return l;
}


Hay un problema que si se insertan mas caracteres de los que pide fgets() luego repite el printf("%s",msg) muchas veces. No se que pasa pero no he conseguido limpiar el buffer. Sabéis como?


@Edit: Acabo de crear otro con iostream en c++

Código (cpp) [Seleccionar]
#include "stdafx.h"
#include "secondTest.hpp"


int getInt(string msg,int max,int min){
string str;
do{
cout << msg;
cin.clear();
cin >> str;
}while(!isInt(str) || str.size()>max || str.size()<min);
return atoi(str.data());
}

bool isInt(string str){
for(size_t i=0;i<str.size();i++){
if(!isdigit(str[i]))
return false;
}
return true;
}


Este no tiene problemas o por lo menos no los he descubierto.

Saludos
#504
Programación C/C++ / Re: Recibir int seguro
8 Marzo 2014, 16:18 PM
Me refiero a insertar código desde fuera sustituyendo la memoria cuando se acabe el buffer. O no es posible?

Con una clase que contiene cadenas con memoria dinamica esto no pasa y en este caso ? con char[size] ??
#505
Programación C/C++ / Re: Recibir int seguro
8 Marzo 2014, 15:19 PM
Gracias ahora consegui hacer lo.

Código (cpp) [Seleccionar]
int getInt(string msg){
string d;
do{
cout << msg;
cin >> d;
}while(!isInt(d));
return atoi(d.data());
}


int isInt(string &str){
for(size_t i=0;i<str.size();i++){
if(!isdigit(str[i])){
return 0;
}
}
return 1;
}


Pero una pregunta. El código de c que utiliza char[] no daría error si se introduce un valor mayor que el size?
Muchas gracias
#506
Programación C/C++ / Recibir int seguro
7 Marzo 2014, 23:57 PM
Hola he buscado por internet como recibir valores por internet de tal manera que sea int y si es un bucle que comprueba los datos no se pare si se inserta una letra.
De modo que este codigo no funciona:

Código (cpp) [Seleccionar]
int d;
do{
cout << msg;
cin >> d;
cin.clear();
//while(cin.get()!='\n');
}while(cin.fail());
return d;


Como comprobar un int?

Saludos
#507
Hola utilizo el mensaje de do-while para preguntar aqui:
CitarPor cierto. En C++ no uses nunca string.h. No sabremos si te refieres a la ce C o a la de C++. Si quieres utilizar cadenas tipo C++ incluye string y si manejas cadenas tipo C utiliza cstring.
Cual es la diferencia ?

Saludos
#508
Osea que la función estaba mal o free hace otra cosa aparte de liberar la memoria es que no me entero   ;D
#509
Hola yo me refiria a las clases pero una pregunta. Como funciona este codigo:

Código (csharp) [Seleccionar]
int* func( )
{
  int* to_return = (int*)malloc( 2 * sizeof( int ) );

  to_return[ 0 ] = 1;
  to_return[ 1 ] = 2;

  free( to_return );
}


ya que nunca devuelve. Creo que free no devuelve o si?

Saludos
#510
Hola vangodp lo que has dicho es devolver? Guarda los valores en las variables pero el sentido de que la función devuelve algo se pierde aunque si devuelve un resultado. Bueno pero se puede utilizar igual.
También se puede utilizar una clase que guarde los dos resultados y se devuelva así se puede devolver con return;
Pero creo que lo que has dicho es mejor.