Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: muymuyperdido en 1 Diciembre 2012, 18:24 pm



Título: Programa con cadenas
Publicado por: muymuyperdido en 1 Diciembre 2012, 18:24 pm
El programa consiste en que yo escribo una frase y me dice las palabras que tiene, y se repite hasta que la frase introducida sea "Fin del ejercicio"
Lo he planteado tal que así y me da error de windows, porque compilar compila y me da las palabras de la primera frase que introduzco (y ya se acaba el programa)

 
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define TAM 200
  4. int palabras (char v[]);
  5. void main()
  6. {
  7.    int i;
  8.    char f[TAM]="Fin del ejercicio";
  9.    char v[TAM];
  10.    do
  11.    {
  12.        printf("Introduzca la frase");
  13.        gets(v);
  14.        printf("El numero de palabras es %d",palabras(v));
  15.    }
  16.    while(v[i]!=f[i]);
  17. }
  18. int palabras (char v[])
  19. {
  20.    int palabras=1,i;
  21.    for(i=0; v[i]!='\0'; i++)
  22.    {
  23.        if(v[i]==' ')
  24.        {
  25.            palabras++;
  26.        }
  27.    }
  28.    return palabras;
  29. }
  30.  


Título: Re: Programa con cadenas
Publicado por: durasno en 1 Diciembre 2012, 18:35 pm
Hola! el problema esta en:
Código
  1. while(v[i]!=f[i]);
en los indices de los arreglos usas la variable "i", a la cual no la inicializas con ningun valor por lo tanto tiene "basura" ocasionando condiciones falsas.. Ademas al comparar de esa manera solo comparas la primera letra de cada arreglo, seria mas optimo usar strcmp para comparar la cadena entera


Saludos


Título: Re: Programa con cadenas
Publicado por: leosansan en 1 Diciembre 2012, 19:56 pm
Se me ha colado Durasno, pero como ya te lo explico él te dejo lo que tenía, fíjate en el uso de strcmp para comparar las cadenas:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define TAM 200
  4. int palabras (char v[]);
  5. void main()
  6. {
  7.    int i;
  8.    char f[TAM]="Fin del ejercicio";
  9.    char v[TAM];
  10.    do
  11.    {
  12.        printf("\nIntroduzca la frase: ");
  13.        gets(v);
  14.        printf("El numero de palabras es %d",palabras(v));
  15.    }
  16.    while( strcmp(f, v));
  17.    puts ("\nHasta lueguito\n");
  18.    return 0;
  19. }
  20. int palabras (char v[])
  21. {
  22.    int palabras=1,i;
  23.    for(i=0; v[i]!='\0'; i++)
  24.    {
  25.        if(v[i]==' ')
  26.        {
  27.            palabras++;
  28.        }
  29.    }
  30.    return palabras;
  31. }
Saluditos!.


Título: Re: Programa con cadenas
Publicado por: muymuyperdido en 2 Diciembre 2012, 11:26 am
Cierto! No habia caido, muchas gracias a ambos!!! :)