Programa con cadenas

Iniciado por muymuyperdido, 1 Diciembre 2012, 18:24 PM

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

muymuyperdido

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)

  #include <stdio.h>
#include <string.h>
#define TAM 200
int palabras (char v[]);
void main()
{
    int i;
    char f[TAM]="Fin del ejercicio";
    char v[TAM];
    do
    {
        printf("Introduzca la frase");
        gets(v);
        printf("El numero de palabras es %d",palabras(v));
    }
    while(v[i]!=f[i]);
}
int palabras (char v[])
{
    int palabras=1,i;
    for(i=0; v[i]!='\0'; i++)
    {
        if(v[i]==' ')
        {
            palabras++;
        }
    }
    return palabras;
}

durasno

Hola! el problema esta en:
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
Ahorrate una pregunta, lee el man

leosansan

Cita de: muymuyperdido en  1 Diciembre 2012, 18:24 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 (cpp) [Seleccionar]
#include <stdio.h>
#include <string.h>
#define TAM 200
int palabras (char v[]);
void main()
{
    int i;
    char f[TAM]="Fin del ejercicio";
    char v[TAM];
    do
    {
        printf("\nIntroduzca la frase: ");
        gets(v);
        printf("El numero de palabras es %d",palabras(v));
    }
    while( strcmp(f, v));
    puts ("\nHasta lueguito\n");
    return 0;
}
int palabras (char v[])
{
    int palabras=1,i;
    for(i=0; v[i]!='\0'; i++)
    {
        if(v[i]==' ')
        {
            palabras++;
        }
    }
    return palabras;
}

Saluditos!.

muymuyperdido

Cierto! No habia caido, muchas gracias a ambos!!! :)