Foros del Web » Programación para mayores de 30 ;) » C/C++ »

problema con c++ funcion gets();

Estas en el tema de problema con c++ funcion gets(); en el foro de C/C++ en Foros del Web. perdonar soy novvato en esto y tengo un problema que supongo que sera una tonteria vereis, no entiendo porque me da error esta funcion, porque ...
  #1 (permalink)  
Antiguo 11/12/2008, 16:43
 
Fecha de Ingreso: diciembre-2008
Mensajes: 3
Antigüedad: 15 años, 4 meses
Puntos: 0
problema con c++ funcion gets();

perdonar soy novvato en esto y tengo un problema que supongo que sera una tonteria vereis, no entiendo porque me da error esta funcion, porque me dice que el gets tiene q tener dentro un puntero... (gets' : no se puede convertir el parámetro 1 de 'char' a 'char *')

que tengo que hacer?

#include <stdio.h>
#include <stdlib.h>
#include <string.h.>
#include "cPersona.h"

void main ()
{
int r,m;
float l,t;
char nom1,nom2;
cPersona p;

printf ("Escribe la edad de la persona: ");
scanf_s ("%d",&r);

p.setEdad (r);
m = p.getEdad();

printf ("La edad de la persona es: %d\n", m);


printf("Escribe la altura de la persona: ");
scanf_s("%f",&l);

p.setAltura(l);
t = p.getAltura();

printf("La altura de la persona es: %f\n", t);


printf("Escribe el nombre de la persona: ");
gets(nom1);


p.setNombre(nom1);
nom2 = p.getNombre();

printf("El nombre de la persona es: %s", nom2);


system("pause");
}
  #2 (permalink)  
Antiguo 12/12/2008, 03:21
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: problema con c++ funcion gets();

char es un caracter solo (una sola letra unicamente) y la funcion gets necesita una cadena de caracteres. Ya que usas scanf_s usa tambien gets_s (los dos bien, no como ahora).

Entonces:

Código:
char nom1[256],*nom2;
...
scanf_s("%d",&r, sizeof(r));
...
scanf_s("%f",&l, sizeof(l));
...
scanf("%*c"); //hacemos esto para que gets no tome el salto de linea que scanf deja en el stdin
gets_s(nom1, sizeof(nom1));
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 12/12/2008, 08:17
 
Fecha de Ingreso: diciembre-2008
Mensajes: 3
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: problema con c++ funcion gets();

creo que entoncesmi problema no es ese sino las funciones asiciadas, nose como se hacen, porque me dice que no se pueden igualar char* y char[20] y cosas asi, yo las he creados asi:


#include<stdio.h>
#include<string.h>
#include "cPersona.h"


void cPersona::setEdad (int e)
{
edad = e;
}

int cPersona::getEdad (void)
{
return edad;
}

void cPersona::setAltura(float a)
{
altura = a;
}

float cPersona::getAltura(void)
{
return altura;
}

void cPersona::setNombre(char n)
{
nom[20] = n;
}

char cPersona::getNombre(void)
{
return nom[20];
}


















muxas gracias por la ayuda qu soy nuevo en esto y perdona que tengas que corregir estos erroes tan tontos...xD
  #4 (permalink)  
Antiguo 12/12/2008, 08:49
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: problema con c++ funcion gets();

Código:
void cPersona::setNombre(char n)
{
nom[20] = n;
}
Con el codigo anterior lo que haces es que nom[20] sea el caracter n (los elementos de nom de 0 a 19 no son modificados en lo absoluto). Y es un error grave ya que si nom es un array de 20 elementos solo son validos 20 elementos, osea de 0 a 19, 20 es el elemento 21 y esta fuera de los limites del array.

Código:
char cPersona::getNombre(void)
{
return nom[20];
}
Con lo anterior retornas un caracter del array nom (tambien fuera de los limites).

Tendrias que hacer algo como esto:
Código:
void setNombre(char *elNombre) 
{ 
  strncpy (nombre, elNombre, sizeof(nombre) - 1);
}
Código:
char *getNombre() 
{ 
return nombre; 
}
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 13/12/2008, 16:01
 
Fecha de Ingreso: diciembre-2008
Mensajes: 3
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: problema con c++ funcion gets();

e exo todo eso y no me va..:S nose que leapsara lo intentare solucionar estos dias. de todas formas gracias por la ayuda :)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:25.