Intento comparar cadenas [novato]

Iniciado por barnix456, 5 Mayo 2012, 17:38 PM

0 Miembros y 1 Visitante están viendo este tema.

Slava_TZD

#10
Acortando código:

#include <stdio.h>
#include <string.h>

main()
{
  char texto[100];  

  printf ("Introduzca la frase correcta: "); fgets(texto,sizeof(texto),stdin);
  while(strcmp(texto,"hola\n")!=0) {
  printf ("Error!\nIntroduzca la frase correcta: "); fgets(texto,sizeof(texto),stdin);
  }
  printf ("La frase es correcta.\n");
}


Joder, que aburrido estoy XD

EDIT: ¿De que libro estás aprendiendo C?


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

barnix456

jajaja...  eso estuvo bueno, vamos eso nunca se me hubiera ocurrido, esta muy bueno eh!! lo mismo pero mas pequeño
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

barnix456

#12
Realmente que es lo que hace esta linea:

fgets(texto,sizeof(texto),stdin);

EDITO:
Realmente de muchos libros, no solo de uno, llevo uno de análisis de algoritmos y dos de c:

1) Programacion.en.C.Metodologia.Algoritmos.y.Estructura.de.datos.Editorial.McGraw-Hill
2) Programacion en C Metodologia, Algoritmos y Estructurade datos [Luis Joyanes Aguilar & Ignacio Zahomero Martines]
3) Como.Programar.en.C.C.Plus.Plus.-.Deitel.Prentice-Hall
4) Lo que pueda aprender aqui en el foro
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

exel

#13
La definicion de fgets() es la siguiente:

char *fgets(char *cadena, int n, FILE *stream);

"Basicamente dice: copiar una cadena de longitud menor a n que este en stream y guardarla en cadena"

...aunque te parezca un poco rara te explico en español lo que significa:

*stream es una fuente de donde se obtiene la cadena de caracteres, esta fuente debe ser un archivo. En tu caso stdin es un archivo donde se almacena lo que escribes por teclado, y se denomina buffer de entrada.

n es la cantidad de caracteres que quieres obtener como maximo de *stream. Comunmente, le asignamos a n la longitud de tu cadena.

cadena es el nombre de tu variable donde se debe almacenar lo que obtendas de *stream

... una restriccion que impone la funcion fgets() es la siguiente:

Citar"Ningún carácter adicional es leído después del carácter de nueva línea ('\n') o después de un final de fichero (EOF)"

barnix456

:o pues a si que le entienda, no mucho tendre que practicar un poco mas sonbre esto, para que lo domine un poco, gracias EXEL
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

exel

Anteriormente dijiste esto:

Cita de: barnix456 en  5 Mayo 2012, 18:54 PM
edito:
tambien esta mal, por que escribo la frase correcta "ola" y dice: frase incorrecta, y lo que deberia decir es que esta bien y salir, aparte el programa nunca se cierra, son siemples errores, intentare analizar ese nuevo modelo, eso es nuevo para mi... :)

La respuesta es que quieres comparar la cadena obtenida con fgets() con la cadena "ola\n", pero, como dije anteriormente, fgets() no puede copiar el caracter '\n'. Por eso estaras comparando "ola" con "ola\n" y nunca lograras asertar.

Saludos

barnix456

Gracias, ese error no lo habia notado, pero bueno al final ya quedo! gracias de nuevo
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

david_BS

yo había hecho una función para comparar dos cadenas, te puede servir si deseás alguna comparación con el fin de realizar un ordenamiento alfabético por ejemplo.
http://foro.elhacker.net/programacion_cc/ejemplo_de_ordenamientos_basicos-t358139.0.html


barnix456

ok gracias... lo revisare, cualquier informacion es buena.. :)
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

Rodrigosolari

#19
amigo una ayuda en tu problema de comparar cadenas.....  espero que sea de tu ayuda

#include<iostream>

using namespace std;

int main(){
   char cadena1[100];
   char cadena2[100];
   bool rpt = true;
   int i=0;
   cout<<"Ingrese la primera Cadena de Texto"<<endl;
   gets(cadena1);
   cout<<"Ingrese la segunda Cadena de Texto"<<endl;
   gets(cadena2);
   cout<<endl<<"\t\t\t\tComparando"<<endl<<endl;
   do{
      if(cadena1[ i ]!=cadena2[ i ]){//borra los espacios entre la i y  [], pues si no  no me lo reconoce
         rpt = false;
         break;
      }
      i++;
   }while(cadena1[ i ]!='\0' || cadena2[ i ]!='\0' );//borra los espacios entre la i y  [], pues si no  no me lo reconoce
   if(rpt){
      cout<<"La cadena de Caracteres son Identicas:  ";
      cout<<"comparacion "<<cadena1<<" = "<<cadena2<<endl;
   }
   else
      cout<<"La cadena de Caracteres son diferentes:  "<<endl;
   system("pause");
}