Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: asdavid en 3 Noviembre 2012, 12:46 pm



Título: como hacer una lectura de una palabra caracter a caracter???
Publicado por: asdavid en 3 Noviembre 2012, 12:46 pm
hola!!
soy muy nuevo en esto de programar en c++ y me pierdo en algunas cosas.
como podria hacer una lectura de una palabra caracter a caracter con sentencias basicas??
habia pensado algo asi:
#include<conio.h>
#include<stdio.h>
char letra;
int main()
{
   int con=0;
   for(contador=0;contador<10;contador++)
   {printf("Introduzca una palabra");
   scanf("%c",&letra);
   printf("%c",letra);}
}
la idea es que me valla diciendo las letras de la palabra una por una,lo que no se es como hacer en el bucle,que me escanee el segundo caracter,y luego el tercero y asi sucesivamente....y la palabra no puede estar almacenada en ninguna variable,ese es el ejercicio
un saludo y gracias!!


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: Stakewinner00 en 3 Noviembre 2012, 12:56 pm
1-Eso es C
2-Utiliza las etiquetas GesHi
3-en c++ seria
Código
  1. #include <iostream>
  2.  
  3. int main () {
  4. char c;
  5. while (;;) {
  6. cin >> c;
  7. cout << "Has escrito " << c << endl;
  8.  
  9. }
  10. }

nose si te refieres a eso.
Pero si la palabra no tiene que estar en una variable solo queda meterlo en un txt pero igualmente seria con variables


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: joewestside en 3 Noviembre 2012, 13:06 pm
Hola.
Me gustaría poder ayudarte pero no he entendido muy bien lo que estás queriendo hacer. Necesitas introducir una palabra entera y luego imprimir letra por letra o ir introduciendo letras y que las vaya imprimiendo? Si lo explicas un poco mejor tal vez podría ayudarte.

En cuanto al código también funciona en C++. Al fin y al cabo C++ proviene de C.


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: Blaster en 3 Noviembre 2012, 13:29 pm
Creo que esto es lo que buscas, no te entendi muy bien:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(){  
  5. char cadena[20];
  6. int i, longi;
  7.  
  8. scanf("%s", cadena);
  9. longi = ((int)strlen(cadena));
  10.  
  11. for(i=0; i<longi; i++)
  12. printf("\n %c", cadena[i]);
  13.  
  14. return 0;
  15. }

Cualquier duda avisame  ;)


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: xiruko en 3 Noviembre 2012, 14:35 pm
Código
  1. #include <stdio.h>
  2. #define MAX 32
  3.  
  4. int main() {
  5.  
  6.     char cadena[MAX];
  7.     int i;
  8.  
  9.     for(i=0; i<MAX-1; i++) {
  10.          scanf("%c", &cadena[i]);
  11.          printf("Has escrito %c\n");
  12.     }
  13.     printf("Cadena entera: %s\n", cadena);
  14.     return 0;
  15. }

un saludo!


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: asdavid en 3 Noviembre 2012, 21:04 pm
gracias a los que habeis contestado!!
lo que quiero es un bucle que me valla leyendo caracter a caracter una palabra, pero dicha palabra NO se puede almacenar en ninguna variable.
el decir si escribo,por ejemplo ´´coche255´´ me tiene que ir diciendo los caracteres uno por uno primero la c, luego la o...asi hasta el 5.
en resumen,una lectura caracter a caracter de una cadena de caracteres(char)
un saludo!!



Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: Stakewinner00 en 3 Noviembre 2012, 21:09 pm
no creo que se pueda sin declarar ni una variable de ningun tipo.



Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: flony en 3 Noviembre 2012, 21:09 pm
si no esta en una variable, debe estar en un txt o algo....si lo pones desde desde el teclado debe quedar en algun lado...yo por lo menos si no es alguna de esas opciones no se


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: Stakewinner00 en 3 Noviembre 2012, 21:13 pm
si no esta en una variable, debe estar en un txt o algo....si lo pones desde desde el teclado debe quedar en algun lado...yo por lo menos si no es alguna de esas opciones no se

si es en un txt supongo que necessitas una variable para guardar la info no?
creo que no hay ninguna forma posible en que no se utilize ni una variable para nada.

Creo que a ese tio le engeñaron un poco no?? XD


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: xiruko en 3 Noviembre 2012, 21:25 pm
podrias hacerlo de la siguiente manera, aunque algo necesario es que indiques el numero de letras a introducir. luego pensare en alguna otra manera...

Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5. int i;
  6.  
  7. printf("Numero de letras? ");
  8. scanf("%d", &i);
  9. while (getchar()!='\n');
  10.  
  11. for (i; i>0; i--) {
  12. printf("Has escrito: %c\n", getchar());
  13. while (getchar()!='\n');
  14. }
  15.  
  16. return 0;
  17. }

salida:

Código:
xiruko:~$ gcc prueba.c -o prueba
xiruko:~$ ./prueba
Numero de letras? 4
a
Has escrito: a
b
Has escrito: b
c
Has escrito: c
d
Has escrito: d
xiruko:~$

un saludo!


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: Stakewinner00 en 3 Noviembre 2012, 21:29 pm
xiruko, no havia pensado en eso pero creo que se refiere a meter un string como "hola" y k le diga h o l a sin variables.


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: xiruko en 3 Noviembre 2012, 21:36 pm
Citar
xiruko, no havia pensado en eso pero creo que se refiere a meter un string como "hola" y k le diga h o l a sin variables.

perdona lo habia entendido mal xD

en ese caso, no se si sera trampa pero se puede hacer asi:

Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char** argv) {
  4.  
  5. if (argc != 2) {
  6. printf("MODO DE USO: %s <palabra>\n", argv[0]);
  7. return 0;
  8. }
  9.  
  10. for (; *argv[1]; argv[1]++) printf("%c\n", *argv[1]);
  11.  
  12. return 0;
  13. }

y la salida:

Código:
xiruko:~$ gcc prueba.c -o prueba
xiruko:~$ ./prueba
MODO DE USO: ./prueba <palabra>
xiruko:~$ ./prueba coche233
c
o
c
h
e
2
3
3
xiruko:~$

si no se puede asi entonces ni idea xD esperare a que alguien mas postee a ver si sabe la solucion.

un saludo!


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: flony en 3 Noviembre 2012, 21:42 pm
jajaj esa esta buena me habia olvidado de esa


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: Stakewinner00 en 3 Noviembre 2012, 21:53 pm
bien pensado xiruko, haber k dice el k pregunta pero desde mi punto de vista aun es una variable, solo que declarada desde otro sitio.


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: xiruko en 3 Noviembre 2012, 21:56 pm
Citar
haber k dice el k pregunta pero desde mi punto de vista aun es una variable

ya.. por eso dije lo de que no se si es trampa xD si no es asi entonces ni idea, pero me gustaria saber como hacerlo.


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: asdavid en 4 Noviembre 2012, 13:45 pm
xiruko,si, es asi,pero no se si podras explicarme o comentarme un poco el programa,te lo agradeceria porque soy muy nevo en esto jej
por ejemplo,por que declaras argc y argv dentro d elos parentesis del main??
y el char** para que sirve??
gracias y todos y perdonen por mi ignorancia jej
un saludo!


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: xiruko en 4 Noviembre 2012, 16:27 pm
Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char** argv) {
  4.  
  5. if (argc != 2) {
  6. printf("MODO DE USO: %s <palabra>\n", argv[0]);
  7. return 0;
  8. }
  9.  
  10. for (; *argv[1]; argv[1]++) printf("%c\n", *argv[1]);
  11.  
  12. return 0;
  13. }

por que declaras argc y argv dentro d elos parentesis del main??
es la manera para poder pasarle argumentos al programa. antes de explicartelo mejor leete la teoria y luego pregunta en el caso de que tengas una duda concreta, sino realmente no entenderas porque se hace asi. si no te importa leer en ingles, puedes leerte este enlace (http://crasseux.com/books/ctutorial/argc-and-argv.html) que es bastante corto. si prefieres en español, buscalo en google que deben haber miles de webs que lo expliquen.

contando con que te has leido ese enlace o algun otro que explique lo mismo, argc es un entero que indica el numero de argumentos totales, siendo el minimo 1 que es el propio programa. en este caso, se llama al programa asi:
Código:
./programa coche255
por lo que habran 2 argumentos: "./programa" y "coche255". de ahi el if del principio del programa, que verifica si solo hay 2 argumentos y en el caso de que no sea asi, indica la manera de usar el programa y se cierra.

y el char** para que sirve??
argv es un puntero a un array de punteros a caracter. este representa los parametros pasados al programa. por ejemplo, en el caso de este programa:
Código:
./programa coche255
argv[0] sera "./programa" y argv[1] sera "coche255". si esto de los punteros no lo entiendes te recomendaria que buscaras de nuevo en google ya que hay tambien miles de webs que hablan sobre ello, y ahi te lo explicaran mucho mejor que yo aqui. si despues de leerlo tienes alguna duda entonces preguntalo aqui y te ayudaremos sin ningun problema.

luego lo que uso en el for es aritmetica de punteros. argv[1] es un puntero a una cadena, asi que la condicion del for es que haya algo en esa posicion de la cadena (que no sea NULL), luego el incremento es sumarle 1 al puntero de la cadena, y dentro tan solo se imprime el caracter en esa posicion de la cadena.

espero que te sirva de ayuda, un saludo!


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: do-while en 4 Noviembre 2012, 21:09 pm
¡Buenas!

Lee el input hasta que de introduce EOF (ctrl+Z en windows)
Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.    while(!feof(stdin))
  6.        putchar(getchar());
  7.    return 0;
  8. }
  9.  

Y otra alternativa que lee solo una linea:
Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.    while(ungetc(getchar(),stdin) != EOF && ungetc(getchar(),stdin) != '\n')
  6.        putchar(getchar());
  7.    return 0;
  8. }
  9.  

¡Saludos!


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: rir3760 en 5 Noviembre 2012, 01:49 am
Y otra alternativa que lee solo una linea:
Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.    while(ungetc(getchar(),stdin) != EOF && ungetc(getchar(),stdin) != '\n')
  6.        putchar(getchar());
  7.    return 0;
  8. }
Si bien funciona correctamente y se ahorra la declaración de una variable se debe pagar un precio elevado: cuatro llamadas a función por cada iteracion del bucle.

Otra opción es utilizar el mínimo de llamadas, si quieres retornar el ultimo carácter leído (en el caso de ser '\n') lo haces después del bucle:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int ch;
  7.  
  8.   while ((ch = getchar()) != EOF && ch != '\n')
  9.      putchar(ch);
  10.   if (ch == '\n')
  11.      ungetc('\n', stdin);
  12.  
  13.   return EXIT_SUCCESS;
  14. }

Un saludo


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: do-while en 5 Noviembre 2012, 09:00 am
Si bien funciona correctamente y se ahorra la declaración de una variable se debe pagar un precio elevado: cuatro llamadas a función por cada iteracion del bucle.

¿¿¿El objetivo no era no declarar ninguna variable???


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: rir3760 en 5 Noviembre 2012, 16:32 pm
¿¿¿El objetivo no era no declarar ninguna variable???
Supongo te refieres al primer mensaje del tema, en el:

* En el código fuente se utiliza la variable "letra" para almacenar cada carácter.

* Se indica "lo que no se es como hacer en el bucle,que me escanee el segundo caracter,y luego el tercero y asi sucesivamente....y la palabra no puede estar almacenada en ninguna variable".

En base a ello yo supongo que no es valido utilizar un array de caracteres para ahí almacenar la palabra (por ejemplo mediante "scanf" con el especificador "%s"), en su lugar se debe leer un carácter, almacenarlo en una variable, procesarlo, leer el siguiente carácter, etc.

Si de eso se trata y se debe utilizar "printf" y "scanf" seria mas o menos asi:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   char ch;
  7.  
  8.   puts("Introduce la palabra:");
  9.   while (scanf("%c", &ch) == 1 && ch != '\n')
  10.      printf("%c\n", ch);
  11.  
  12.   return EXIT_SUCCESS;
  13. }

Un saludo


Título: Re: como hacer una lectura de una palabra caracter a caracter???
Publicado por: cypascal en 5 Noviembre 2012, 20:21 pm
Yo lo haria asi:

Código:
#include <stdio.h>

int main(void)
{
char c;

scanf("%c", &c);
while (c!=('\n'))
{
printf("%c",c);
scanf("%c", &c);
}
}

Te lo dejo tambien aqui: http://cypascal.blogspot.com.es/2012/11/problema-9-lectura-de-caracteres.html (http://cypascal.blogspot.com.es/2012/11/problema-9-lectura-de-caracteres.html)

Un saludo