Duda programa principiante C

Iniciado por Adri124, 13 Junio 2010, 18:17 PM

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

Adri124

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 ^^

-Ramc-

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.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Littlehorse

Utiliza fgets

Código (cpp) [Seleccionar]
fgets(micadena,sizeof(micadena),stdin);
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Adri124

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!!

-Ramc-

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.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Adri124

Ok de acuerdo, muchas gracias!!