Autor
|
Tema: Duda con programa - funcion strlen? (Leído 4,730 veces)
|
welchu
Desconectado
Mensajes: 17
|
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
Mensajes: 1.314
|
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:#include <stdio.h> int main() { char texto[40]; int i; printf("Introduce tu nombre: "); scanf("%s", texto); for (i=0;texto[i];i++) printf("%c ", texto[i]); getchar(); getchar(); return 0; }
¡¡¡¡ Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
adastra
Endless Learner
Ex-Staff
Desconectado
Mensajes: 885
http://thehackerway.com/
|
Antes que nada, valida la longitud de la entrada del usuario... Si ingresa más de 40 caracteres que pasará?
|
|
|
En línea
|
|
|
|
welchu
Desconectado
Mensajes: 17
|
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
|
|
|
|
|
Yoel Alejandro
|
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 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 scanf("%s", nombre);
por #define N 40 char nombre[N]; 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
Mensajes: 1.211
|
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: void LimpiarBuffer() { int ch; while ((ch = getchar()) != '\n' && ch != EOF); }
|
|
|
En línea
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
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.- 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.-
#include<stdio.h> #include<string.h> #define MAX 6 int main(void){ char cadena[MAX]={'\0'}, *p=NULL; unsigned int ch=0; printf("\n\n ----- Programa que muestra el comportamiento de fgets -----"); printf("\n\n Ingrese una frase....:"); fgets(cadena , MAX , stdin ); *p='\0'; } else{ while((ch = getchar()) !='\n' && ch !=EOF ); } printf("\n Ingreso..............:%s", cadena ); return 0; }
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
Mensajes: 1.314
|
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
Mensajes: 366
|
Hola welchu. Te pongo un complemento más que me había olvidado.- El else tiene que quedar así: else{ cadena[MAX-1] = '\0'; /* Esta es la linea que me faltaba */ while((ch = getchar()) !='\n' && ch !=EOF ); }
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.-
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda con funcion dentro de funcion en un echo
PHP
|
N4X
|
6
|
6,071
|
21 Enero 2010, 18:12 pm
por N4X
|
|
|
Duda con strlen [Solucionado]
Programación C/C++
|
Dark00
|
9
|
5,755
|
11 Noviembre 2012, 19:17 pm
por Dark00
|
|
|
[FASM]strlen en ASM
ASM
|
0xDani
|
7
|
5,919
|
28 Diciembre 2012, 14:30 pm
por avesudra
|
|
|
strlen() y .length()
Programación C/C++
|
erest0r
|
4
|
4,505
|
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
|
2,399
|
20 Octubre 2017, 01:48 am
por engel lex
|
|