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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


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

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Duda con programa - funcion strlen?
« en: 11 Febrero 2014, 10:54 am »

Hola, tengo una duda con el siguiente programa:

Un programa que te pida tu nombre y lo muestre en pantalla separando cada letra de la siguiente con un espacio.
Por ejemplo, si tu nombre es "Juan", debería aparecer en pantalla "J u a n"

No se cómo hacer para separar la palabra pero puedo sacar la primera letra, las otras letras creo que se debe utilizar con la función 'strlen'? Aunque creía que 'strlen' solo indicaba las letras que el usuario ha tecleado.

#include <stdio.h>
#include <string.h>
int main()
{
    char texto[40];
   
    printf("Introduce tu nombre: ");
    scanf("%s", texto);
   
    printf("La primera letra es %c", texto[0]);
   
    //Utilizar strlen()???
   
    getchar();
    getchar();
    return 0; 
}



Alguien me puede ayudar?
Gracias, un saludo


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda con programa - funcion strlen?
« Respuesta #1 en: 11 Febrero 2014, 11:18 am »

Hola, tengo una duda con el siguiente programa:

Un programa que te pida tu nombre y lo muestre en pantalla separando cada letra de la siguiente con un espacio.
Por ejemplo, si tu nombre es "Juan", debería aparecer en pantalla "J u a n"

.............................................................

Strlen te da la longitud de la cadena.

Para lo que quieres basta un bucle, por ejemplo con un for:


Código
  1. #include <stdio.h>
  2. int main()
  3. {
  4.    char texto[40];
  5.    int i;
  6.    printf("Introduce tu nombre: ");
  7.    scanf("%s", texto);
  8.    for (i=0;texto[i];i++)
  9.      printf("%c ", texto[i]);
  10.    getchar();
  11.    getchar();
  12.    return 0;
  13. }

¡¡¡¡ Saluditos! ..... !!!!






En línea

adastra
Endless Learner
Ex-Staff
*
Desconectado Desconectado

Mensajes: 885


http://thehackerway.com/


Ver Perfil WWW
Re: Duda con programa - funcion strlen?
« Respuesta #2 en: 11 Febrero 2014, 12:08 pm »

Antes que nada, valida la longitud de la entrada del usuario... Si ingresa más de 40 caracteres que pasará? :silbar:
:silbar:
En línea

welchu

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Duda con programa - funcion strlen?
« Respuesta #3 en: 11 Febrero 2014, 12:29 pm »

Ya he conseguido que funcione el programa:

/*Un programa que te pida tu nombre y lo muestre en pantalla separando cada letra de la siguiente con un espacio.
Por ejemplo, si tu nombre es "Juan", debería aparecer en pantalla "J u a n"*/
#include <stdio.h>
#include <string.h>
int main()
{
    char nombre[40];
    char i;
   
    printf("Introduce tu nombre: ");
    scanf("%s", nombre);
   
    for(i=0; i<strlen(nombre); i++)
    printf("%c ", nombre);
   
    //printf("La primera letra es %c", nombre[0]);
       
    getchar();
    getchar();
    return 0; 
}

Utilizando un bucle for como habéis dicho y con la función strlen que "limpia" las letras que sobran.
Lo único que no se es qué pasaría es si ingresamos más de 40 caracteres. :/
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Duda con programa - funcion strlen?
« Respuesta #4 en: 11 Febrero 2014, 12:58 pm »

Lo único que no se es qué pasaría es si ingresamos más de 40 caracteres. :/

Yo te lo digo... escribirías fuera del buffer y, en ese caso, lo mejor que te puede pasar es que el programa de un error fatal.

revisa este hilo para más información:

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html
En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Duda con programa - funcion strlen?
« Respuesta #5 en: 11 Febrero 2014, 22:21 pm »

Lo que plantea eferion es verdad. Una buena manera (sencilla) de limitar la longitud de la cadena de entrada es usar fgets (es lo mismo que explican en el post referenciado). Su prototipo es

Código
  1. fgets( char * buffer, int N, FILE * stream );

donde buffer es la cadena donde será copiada la entrada, N es la mayor cantidad de caracteres copiados al array incluyendo el nulo de terminación (por lo que leerá máximo N-1 caracteres), y stream es el flujo o archivo de donde leerá los datos. Debemos poner "stdin" para lea de la entrada estándar (teclado).

De este modo, reemplaza la sentencia

Código
  1. scanf("%s", nombre);

por

Código
  1. #define N 40
  2. char nombre[N];
  3.  
  4. fgets( nombre, N, stdin );

que leerá máximo 39 caracteres de la entrada estándar.
« Última modificación: 11 Febrero 2014, 22:37 pm por yoel_alejandro » En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con programa - funcion strlen?
« Respuesta #6 en: 12 Febrero 2014, 02:16 am »

que leerá máximo 39 caracteres de la entrada estándar.
Si, pero se quedará el resto de caracteres "esperando" en el buffer de entrada. Volverán a aparecer cuando pidas otro dato por teclado.

Una solución sería vaciarlo a mano después de utilizar fgets:
Código
  1. void LimpiarBuffer()
  2. {
  3.   int ch;
  4.  
  5.  while ((ch = getchar()) != '\n' && ch != EOF);
  6.  
  7. }
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Duda con programa - funcion strlen?
« Respuesta #7 en: 12 Febrero 2014, 03:36 am »

Hola welchu.
Fíjate si esto también te puede ayudar, el caso que en la función de amchacon no podes llamarla siempre porque si ingresas 6 o más caracteres(relacionado con mi programa) el bucle while queda “patinando” porque nunca encuentra el [Enter] o salto de línea para finalizar.-
Ejemplo: si ingresas “Daniel” el programa leerá “Danie”  5 caracteres y el sexto es para el ‘\n’ que en este caso quedará en el buffer de teclado haciendo que el bucle while nunca finalize.-
Bueno no hace tanto que estudio c y si me equivoco me lo dirán.-


Citar
fgets leerá hasta n-1 caracteres o hasta que lea un retorno de línea (\n).
En este último caso , el carácter de retorno de línea también es leído.-   

Código
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. #define MAX 6
  5.  
  6. int main(void){
  7. char cadena[MAX]={'\0'}, *p=NULL;
  8. unsigned int ch=0;
  9.  
  10. printf("\n\n ----- Programa que muestra el comportamiento de fgets -----");
  11. printf("\n\n Ingrese una frase....:");
  12. fgets(cadena, MAX, stdin);
  13. if((p=strchr(cadena, '\n'))){
  14. *p='\0';
  15. }
  16. else{
  17. while((ch = getchar()) !='\n' && ch!=EOF);
  18. }
  19. printf("\n Ingreso..............:%s", cadena);
  20.  
  21. printf("\n\n Pulse [Enter] para finalizar..."); getchar();
  22. return 0;
  23. }
   

Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda con programa - funcion strlen?
« Respuesta #8 en: 12 Febrero 2014, 11:05 am »


Es conveniente amigo NOB2014 no apuntarse tantos a costa de otros.

No te cuesta nada comentar que el código que propones es un copy-paste del de xiruko en error_fgets.


¡¡¡¡ Saluditos! ..... !!!!



En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Duda con programa - funcion strlen?
« Respuesta #9 en: 18 Febrero 2014, 03:11 am »

Hola welchu.
Te  pongo un complemento más que me había olvidado.-
El else tiene que quedar así:
Código
  1. else{
  2. cadena[MAX-1] = '\0'; /* Esta es la linea que me faltaba  */
  3. while((ch = getchar()) !='\n' && ch!=EOF);
  4. }

Saludos.
Daniel
« Última modificación: 21 Febrero 2014, 21:08 pm por NOB2014 » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con funcion dentro de funcion en un echo
PHP
N4X 6 5,019 Último mensaje 21 Enero 2010, 18:12 pm
por N4X
Duda con strlen [Solucionado]
Programación C/C++
Dark00 9 4,070 Último mensaje 11 Noviembre 2012, 19:17 pm
por Dark00
[FASM]strlen en ASM
ASM
0xDani 7 4,151 Último mensaje 28 Diciembre 2012, 14:30 pm
por avesudra
strlen() y .length()
Programación C/C++
erest0r 4 3,310 Último mensaje 17 Septiembre 2013, 08:25 am
por erest0r
Multiplicacion de un caracter y de una palabra cifrada usando funcion strlen
Programación C/C++
Alcantrz 1 1,336 Último mensaje 20 Octubre 2017, 01:48 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines