elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda sobre programa en C con STRINGS
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda sobre programa en C con STRINGS  (Leído 2,679 veces)
elWartix

Desconectado Desconectado

Mensajes: 6



Ver Perfil
Duda sobre programa en C con STRINGS
« en: 8 Marzo 2016, 20:46 pm »

Buenas tengo un problema.

estoy haciendo el siguiente programa y al llegar a la funcion alta no me funciona fgets para coger el string y luego poder pasarlo a un string dinamico, utilizo fgets y no gets para que si se escribe mas de la capacidad del string que no se sobrescriban datos.

Os dejo aquí el código a  ver si podeis ayudarme, está sin acabar, pero ya tengo ese problema. Gracias

Código:
//Proyecto Agenda.

#include <stdio.h>
#include <stdlib.h> //Por si utilizamos memoria dinamica para que sea mais rapido/eficiente
#include <string.h>

typedef struct{
char *nombre; //memoria dinamica para ahorrar espacio
int numero;


}datos;



void alta();
void baja();
void consultar();


int main(){

char aux[100];
int selector;

do{
printf("==========================");
printf("           MENU          ");
printf("==========================");
printf("\n");
printf("\n");
printf("Eliga una de las siguientes opciones: ");
printf("\n");
printf("\n");
printf("1- Dar de alta un contacto\n");
printf("2- Dar de baja un contacto\n");
printf("3- Consultar contactos\n");

fflush(stdin);      //limpiamos buffer por si se introduce una frase para que no se cree un bucle infinito
scanf("%i",&selector);


system("cls");  //borrar pantalla

}while(selector < 1 || selector > 3);


switch(selector){

case 1:   alta();               break;
case 2:   baja();             break;
case 3:   consultar();      break;

default: printf("ERROR"); //No es necesario este default.
}


system("pause");
return 0;
}

void alta(){

char auxiliar [100];
printf("Introduce el nombre: \n");
fgets(auxiliar,100,stdin);


}

void baja(){


}

void consultar(){


}


En línea

while(alive){
   eat();
   sleep();
   code();
   repeat();
}
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Duda sobre programa en C con STRINGS
« Respuesta #1 en: 8 Marzo 2016, 20:58 pm »

En alta(), auxiliar es una variable local y cuando se salga del ámbito de la función la información contenida va a desaparecer.

De todas formas deberías guardarlo en nombre de una variable de tipo struct dato. Recuerda que para hacer eso primero debes asignar espacio en la memoria con malloc o calloc para el puntero a char nombre. De igual forma deberás tener en cuenta que la memoria que dejes de usar de un tipo dato tendrás que liberar el puntero nombre con free antes de borrar el dato.

Supongo también que te interesará hacer una lista de datos por lo que tendrás que implementarla, pero eso más adelante.


En línea

elWartix

Desconectado Desconectado

Mensajes: 6



Ver Perfil
Re: Duda sobre programa en C con STRINGS
« Respuesta #2 en: 8 Marzo 2016, 21:32 pm »

Entiendo, lo que quiero hacer con auxiliar es guardar la frase temporalmente para luego medir la longitud de la frase y asignar la memoria con malloc en funcion de la longitud y asi no desperdiciar memoria, pero mi problema es que cuando inicio el programa y llego a la funcion alta, no me deja introducir una frase a auxiliar con fgets sino que en vez de pararse para poder escribir el programa continua, y no tengo ni idea de porque. Muchas gracias! :)
En línea

while(alive){
   eat();
   sleep();
   code();
   repeat();
}
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Duda sobre programa en C con STRINGS
« Respuesta #3 en: 8 Marzo 2016, 22:17 pm »

Entiendo.
Hoy mismo ha habido una consulta en el foro con tu mismo problema.
Y repito:
fflush(stdin); no sirve para todos los compiladores, el estándar no define un comportamiento; por tanto solo se debe usar fflush para streams de salida.

Después de un scanf queda el caracter '\n' en el buffer del teclado que será recogido en la próxima lectura. Para evitarlo usar la instrucción
Código
  1. while(getchar() != '\n');
justo después de la instrucción scanf.
En línea

elWartix

Desconectado Desconectado

Mensajes: 6



Ver Perfil
Re: Duda sobre programa en C con STRINGS
« Respuesta #4 en: 9 Marzo 2016, 16:37 pm »

Muchas gracias, has sacado el tema del fflush(stdin) y me he dado cuenta de que me faltaba para vaciar el buffer antes de pedir que se introduzca la string por teclado. La he puesto y ya me funciona. MUCHISIMAS GRACIAS!

Código:
void alta(){
char auxiliar [100];

fflush(stdin);
printf("Introduce el nombre: \n");
fgets(auxiliar,100,stdin);


}

Así queda finalmente. Muchas gracias de nuevo.
En línea

while(alive){
   eat();
   sleep();
   code();
   repeat();
}
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Duda sobre programa en C con STRINGS
« Respuesta #5 en: 9 Marzo 2016, 21:01 pm »

No lo has entendido:
Usar fflush(stdin); es una muy mala práctica.
En línea

elWartix

Desconectado Desconectado

Mensajes: 6



Ver Perfil
Re: Duda sobre programa en C con STRINGS
« Respuesta #6 en: 9 Marzo 2016, 21:51 pm »

Sí, he entendido que no es recomendado, pero es que en el propio ejercicio me piden que lo utilice.
En línea

while(alive){
   eat();
   sleep();
   code();
   repeat();
}
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Duda sobre programa en C con STRINGS
« Respuesta #7 en: 10 Marzo 2016, 09:31 am »

Ah, ok, entonces sí  :rolleyes:
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda sobre modificar strings de VB compilado
Programación Visual Basic
katanaia 3 2,622 Último mensaje 21 Octubre 2008, 01:13 am
por Spider-Net
Duda - Strings
Programación Visual Basic
h0oke 3 2,557 Último mensaje 23 Septiembre 2009, 01:11 am
por W0lFy
Duda comparación de strings
.NET (C#, VB.NET, ASP)
BlaineMonkey 2 2,863 Último mensaje 23 Febrero 2010, 10:29 am
por BlaineMonkey
Duda sobre manejo de strings en bash
Scripting
rastanthology 7 5,427 Último mensaje 28 Septiembre 2010, 00:00 am
por rastanthology
Duda con strings y punteros
Programación C/C++
Ja_90 2 8,022 Último mensaje 1 Noviembre 2014, 03:07 am
por Ja_90
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines