Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Adri124 en 13 Junio 2010, 18:17 pm



Título: Duda programa principiante C
Publicado por: Adri124 en 13 Junio 2010, 18:17 pm
Hola, soy muy principiante en la programación, y he intentado hacer un programa que, leyendo la frase queintroduces por teclado, te indica el numero de veces que aparece la letra a, la letra b, y los espacios. Mi problema esque el programa ignora completamente las primeras letras (en el caso de poner "Mi perro es blanco", te devuelve laslecturas de " perro es blanco", dejando un espacio extra).

Para llevar a cabo el programa he usado el comando gets, y puede que radique ahí el fallo, pero no lo se...

Aquí está mi programa:

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


int main()
     {

     char micadena [50];
     char *p;

     int espacios = 0;
     int letraa = 0;
     int letrab = 0;


     printf ("Introduce tu frase: ");

     scanf("%s", micadena);

     p = gets (micadena);

     while (*p != '\0')

     {
         if (*p == 'a') letraa++;
         if (*p == 'b') letrab++;
         if (*p == ' ') espacios++;

         p++;
     }

     printf ("En tu cadena \'%s\' hay %d letras \'a\', %d letras \'b\', y %d espacios ", micadena, letraa, letrab, espacios);

     return 0;

     }

´
Muchas gracias de antemano, y perdón por las molestias, y mas si es una duda absurda ^^


Título: Re: Duda programa principiante C
Publicado por: -Ramc- en 13 Junio 2010, 19:50 pm
Con el scanf lees "Mi" y después con el gets le caes encima leyendo el resto de lo que quedó en el buffer. Por eso te lee solo una parte de la cadena, el scanf lee hasta que encuentra el espacio.


Título: Re: Duda programa principiante C
Publicado por: Littlehorse en 13 Junio 2010, 19:56 pm
Utiliza fgets

Código
  1. fgets(micadena,sizeof(micadena),stdin);


Título: Re: Duda programa principiante C
Publicado por: Adri124 en 13 Junio 2010, 20:03 pm
Era una duda absurda, si señor jajaj gracias a los dos, de verdad, al final lo que hice simplemente fue suprimir el scanf porque solo recogia hasta el prime espacio y entraba en conflicto con el gets, pero no habia hecho esto antes porque pensaba que sin scanf no recogias nada y acababa el programa xDD

Un saludo!!


Título: Re: Duda programa principiante C
Publicado por: -Ramc- en 13 Junio 2010, 20:08 pm
Igual, siempre es bueno que uses fgets como te indica Littlehorse, para no tener problemas después con el tamaño de los datos que quieres leer y eso.
Saludos.


Título: Re: Duda programa principiante C
Publicado por: Adri124 en 14 Junio 2010, 16:51 pm
Ok de acuerdo, muchas gracias!!