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

Ingresar texto [C]

Estas en el tema de Ingresar texto [C] en el foro de C/C++ en Foros del Web. Hola buenas a todos... veran tengo un programa en el cual se deben ingresar dos palabras o frases, luego el mismo las comparará y dirá ...
  #1 (permalink)  
Antiguo 24/01/2012, 14:52
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 10 meses
Puntos: 35
Ingresar texto [C]

Hola buenas a todos... veran tengo un programa en el cual se deben ingresar dos palabras o frases, luego el mismo las comparará y dirá si son iguales o distintas.
El problema es que al ingresar la primera cadena automáticamente la segunda toma el valor de "" sin dejar que el usuario pueda ingresarlo. Para poder ingresar el valor de la segunda cadena, se debería dejar la cadena1 en blanco.
No se por que sucede esto, sin más dejo el code:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. void main()
  5. {
  6.      char cadena1, cadena2;
  7.      
  8.      printf("Escriba una frase o palabra: ");
  9.      scanf("%c", &cadena1);
  10.      printf("\n");
  11.      
  12.      printf("Escriba otra frase o palabra: ");
  13.      scanf("%c", &cadena2);
  14.      printf("\n");
  15.      
  16.      if (cadena1 == cadena2)
  17.      {
  18.         printf("Iguales.\n");
  19.      }
  20.      else
  21.      {
  22.          printf("Distintas.\n");
  23.      }
  24.      
  25.      printf("\n");
  26.          
  27.      system("PAUSE");
  28.      
  29. }

  #2 (permalink)  
Antiguo 24/01/2012, 15:43
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 10 meses
Puntos: 94
Respuesta: Ingresar texto [C]

Hola carbon! te faltan varios conceptos d C, pero t comento algunas cosas. Cuando usas el tipo de dato char es para almacenar un caracter y no una palabra, para hacer esto deberias usar un arreglo ¿como lo definis? Asi
Código C:
Ver original
  1. char arreglo[10];
Ahora como guardas una palabra ahi?? usando el scanf pero de esta manera:
Código C:
Ver original
  1. scanf("%s",arreglo);

Luego para comparar dos palabras se usa la funcion strcmp de la libreria <string.h>
Código C:
Ver original
  1. if(strcmp(arreglo1,arreglo2)==0)
La funcion strcmp devuelve un numero, si las palabras son iguales devuelve 0(cero) de lo contario devuelve un valor diferente de cero.. Te recomiendo que leas algun libro como para q tengas una buena base

Saludos
  #3 (permalink)  
Antiguo 24/01/2012, 15:56
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 10 meses
Puntos: 35
Respuesta: Ingresar texto [C]

Cita:
Iniciado por cesar_casla Ver Mensaje
Hola carbon! te faltan varios conceptos d C, pero t comento algunas cosas. Cuando usas el tipo de dato char es para almacenar un caracter y no una palabra, para hacer esto deberias usar un arreglo ¿como lo definis? Asi
Código C:
Ver original
  1. char arreglo[10];
Ahora como guardas una palabra ahi?? usando el scanf pero de esta manera:
Código C:
Ver original
  1. scanf("%s",arreglo);

Luego para comparar dos palabras se usa la funcion strcmp de la libreria <string.h>
Código C:
Ver original
  1. if(strcmp(arreglo1,arreglo2)==0)
La funcion strcmp devuelve un numero, si las palabras son iguales devuelve 0(cero) de lo contario devuelve un valor diferente de cero.. Te recomiendo que leas algun libro como para q tengas una buena base

Saludos
Hola cesar, gracias por tu respuesta. Bueno te comento que estaba enterado de lo que me comentas, pero me pregunto que pasaria si en la variable arreglo el usuario ingresara una frase de más de 10 caracteres. Olvidé decir que para realizar este programa no podía utilizar la función strcmp (una de las reglas del ejercicio).

  #4 (permalink)  
Antiguo 24/01/2012, 16:33
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 10 meses
Puntos: 94
Respuesta: Ingresar texto [C]

La parte que queda fuera del arreglo se almacena en un buffer interno el cual luego te puede producir errores. Para evitar eso generalmente suelen usar(no es mi caso) fgets el cual te permite pasarle como argumento el maximo que podes ingresar en un arreglo.
Aclaracion: no es lo mismo una palabra que una frasa, la frase puede blancos por lo que si usas scanf vas a tener un problema, el scanf solo guarda en el arreglo caracteres hasta que encuentra un blanco ¿que son los blancos? espacios, tabuladores, salto de linea

Si no podes usar la funcion strcmp podrias crear que tu propia funcion my_strcmp que haga lo mismo que hace strcmp

Saludos
  #5 (permalink)  
Antiguo 24/01/2012, 19:51
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 10 meses
Puntos: 35
Respuesta: Ingresar texto [C]

Gracias ;) Por último, como podría hacer para que el usuario pueda ingresar una frase, sin importar cuantos caracteres o espacios en blanco tenga, y que la misma pueda almacenarse en una variable?

  #6 (permalink)  
Antiguo 24/01/2012, 20:41
 
Fecha de Ingreso: enero-2011
Ubicación: Venezuela, Táchira
Mensajes: 96
Antigüedad: 13 años, 10 meses
Puntos: 10
Respuesta: Ingresar texto [C]

Hola carbon, mira para leer mas de una palabra y almacenarla en una variable debes usar un array de char o un puntero a char y usas la funcion fgets para leerla
es decir
Código C:
Ver original
  1. char cadena[tamano];
  2. fgets(cadena_a_leer, tamano_de_cadena, stdin);

ahora bien el 2do parametro de fgets en este caso llamado tamano_de_cadena, debe contener la misma cantidad de bytes que tiene cadena osea a tamano...

aqui un codigo de ejemplo:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main ()
  4. {
  5.   char cadena [100];
  6.   printf ("Introduzca una cadena: ");
  7.   fgets (cadena, 100, stdin);
  8.   printf ("La cadena leída es: "%s"n", cadena);
  9.   return 0;
  10. }

eso es si quieres leer una cantidad de caracteres especificamente (100 en este ejemplo), si quisieras leer dinamicamente o si no sabes cuantos caracteres el usuario introducira debes asignar memoria a un char *cadena con la funcion malloc

espero haberte ayudado un poco :D
  #7 (permalink)  
Antiguo 25/01/2012, 09:37
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 10 meses
Puntos: 35
Respuesta: Ingresar texto [C]

Gracias! Si que me has ayudado :)

Corrí el código creo que hay un error en

Código C:
Ver original
  1. printf ("La cadena leída es: "%s"n", cadena);

Debería ser (creo):

Código C:
Ver original
  1. printf ("La cadena leída es: %s\n", cadena);

Por último... he notado que me lee la cadena con 1 caracter menos, si la cadena es 100 me lee 99 caracteres, si es 15 me lee 14, etc.


Última edición por carbon; 25/01/2012 a las 09:46
  #8 (permalink)  
Antiguo 25/01/2012, 10:13
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 10 meses
Puntos: 94
Respuesta: Ingresar texto [C]

Te lee un caracter menos xq asi lo especifica el man de fgets. El segundo argumento lee hasta tamaño_de_cadena - 1, luego ese caracter que quedo libre es para almacenar el caracter nulo

Saludos
  #9 (permalink)  
Antiguo 25/01/2012, 10:44
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 10 meses
Puntos: 35
Respuesta: Ingresar texto [C]

Gracias ;)

  #10 (permalink)  
Antiguo 25/01/2012, 14:23
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 10 meses
Puntos: 46
Respuesta: Ingresar texto [C]

Perdon, se que el tema ya ha sido aclarado pero añado un consejo en el uso de fgets:
Intentad no poner un valor, fgets(cadena,100,stdin), ya que dependiendo del procesador las variables char pueden ocupar diferente numero de bytes, en lugar de usar eso, es mejor usar fgets(cadena,sizeof(cadena),stdin), y la funcion sizeof nos calculara el tamaño de cadena y asi no tendremos que introducirlo manualmente.
  #11 (permalink)  
Antiguo 26/01/2012, 10:44
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 10 meses
Puntos: 35
Respuesta: Ingresar texto [C]

Gracias, lo tendre en cuenta :)

Etiquetas: programa, cadenas
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 03:38.