Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: FrancoMoglia en 6 Abril 2016, 04:57 am



Título: [Ayuda]Problema con variables
Publicado por: FrancoMoglia en 6 Abril 2016, 04:57 am
Que tal gente del foto, es mi primer post, sepan disculpar los errores...

tengo un problema con la programacion en C, estoy utilizando la IDE ZinjaI.

el problema es que escribo mi codigo pero al momento de la ejecucion, pide que se ingrese un caracter/numero y los toma de a dos, es decir se saltea uno... les dejo imagenes por si no se entendio lo que he escrito..

Mod: Imágenes dirigen a site erroneo

PARA EVITAR LO DE LAS IMAGENES, LES PASO EL PROPIO CODIGO COMPLETO:
#include <stdio.h>
#include <conio.h>
int main()
{
   /*realizar un programa que permita:
   a) ingresar 15 caracteres.
   b)calcular la cantidad de vocales.
   c) indicar la cantidas de vocales por tipo
   d)usar sentencia switch*/
   char a;
   int conta,conte,conti,conto,contu,cont;
   cont=0;
   conta=0;
   conte=0;
   conti=0;
   conto=0;
   contu=0;
   while(cont<15)
   {
      printf("Ingrese un caracter:\n");
      scanf("%c",&a);
      switch(a){
      case 'a':conta++;break;
      case 'e':conte++;break;
      case 'i':conti++;break;
      case 'o':conto++;break;
      case 'u':contu++;break;
      default:cont++;break;
      }
      cont++;
   }
   printf("La cantidad de 'a' introducidas fueron %d\n",conta);
   printf("La cantidad de 'e' introducidas fueron %d\n",conte);
   printf("La cantidad de 'i' introducidas fueron %d\n",conti);
   printf("La cantidad de 'o' introducidas fueron %d\n",conto);
   printf("La cantidad de 'u' introducidas fueron %d\n",contu);
   return 0;
}

Y EL ERROR OCURRE ASI:

Ingrese un caracter:
a
Ingrese un caracter:
Ingrese un caracter:
a
Ingrese un caracter:
Ingrese un caracter:
..
etc..


Título: Re: [Ayuda]Problema con variables
Publicado por: engel lex en 6 Abril 2016, 05:10 am
puedes publicar la sección de código respectiva al problema (las imagenes estaban mal direccionadas)

si lo haces procura usar las etiquetas GeSHi


Título: Re: [Ayuda]Problema con variables
Publicado por: class_OpenGL en 6 Abril 2016, 15:13 pm
El error ocurre porque cuando tu introduces un carácter en la consola y le das a enter para confirmas, en realidad estás enviando el carácter que has escrito más el carácter de fin de línea (en C representado con '\n'). Entonces, después de leer cada carácter, tendrías que limpiar el búfer de stdin. Sé como se hace en C++, pero no en C, eso quiere decir que el código que te voy a mostrar para limpiar el búfer quizás no funcione.

Código
  1. while('\n' != fgetc(stdin));


Título: Re: [Ayuda]Problema con variables
Publicado por: FrancoMoglia en 6 Abril 2016, 15:47 pm
muchas gracias por responder, la pregunta surge porque mi profesora no me quiso enseñar, me dijo que busque en foros, asi que mucho no entiendo, podrias mostrarme en que parte del codigo que yo pase, va ese fragmento que tu me dices? muchas gracias


Título: Re: [Ayuda]Problema con variables
Publicado por: class_OpenGL en 6 Abril 2016, 16:09 pm
Va después de cada vez que uses scanf, fgec o demás funciones para leer datos desde la consola. Es importante que sepas por qué usas esa línea. Lo que hace esa línea es leer todos los caracteres de la consola que no se han leído por ciertas circunstancias. Por ejemplo, el que es tu caso, lees un carácter de la consola, pero cuando envías ese carácter desde la consola, estás enviando ese carácter más un carácter de fin de línea (se genera cuando pulsas enter). Entonces, cuando lees con scanf("%c", ...);, estás leyendo un carácter pero dejando el salto de línea sin leer. Por eso, después de usar scanf leemos todos los caracteres hasta que hayas leído un salto de línea.


Título: Re: [Ayuda]Problema con variables
Publicado por: FrancoMoglia en 6 Abril 2016, 18:39 pm
Muchisimas gracias por responder y tomarte el tiempo de explicarme, sobre todo porque soy nuevo en esto de programar y la profesora no quiso explicarme que estaba sucediendo, de nuevo gracias por tu tiempo, ya comprobe el codigo y ahora funciona perfectamente. Saludos