/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Posible problema con tipo de datos char.

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Roberto Hernández Sánchez



Registrado: 10 Nov 2007
Mensajes: 2
Ubicación: México

MensajePublicado: 11/11/2007 8:14 pm
Título: Posible problema con tipo de datos char.

Saludos a todos...

Tengo cerca de una semana que he empezado a estudiar C, Trabajo bajo Kubuntu con el IDE Eclipse, paso a explicar mi problema:

El primer ejercicio consiste en sumar una cantidad dada por usuario de datos tipo char y el total convertirlo a datos int:

#include <stdio.h>

int main()

{
int suma,n,cont; /*Declaracion de variables*/
char car; /*Declaracion de variables*/
suma=0;
cont=0;
printf ("¿Cuantos digitos va a ingresar? ");
scanf ("%d",&n); /*Ingresar valor a "n"*/
while (cont<=n) /*Inicio de bucle*/
{
printf ("\n Ingrese un caracter: ");
scanf ("%c",&car); /*Ingresar valor a"car"*/
suma+=(int)car;
cont++;
}
printf ("\nLa suma de todos los caracteres es: %d",suma);
return 0;
}

Y esto es lo que me muestra consola al momento de correr el codigo:

¿Cuantos digitos va a ingresar? 4

Ingrese un caracter:
Ingrese un caracter: a

Ingrese un caracter:
Ingrese un caracter: b

Ingrese un caracter:
La suma de todos los caracteres es: 225

Raro no?

El segundo ejercicio consiste en contar el numero de veces que se repite un caracter de una lista terminada en '.'. Aqui esta el codigo:

#include <stdio.h>

int main()

{
int cont;
char g,j;
cont=0;
printf("Ingrese el caracter que se va a contar: ");
scanf ("%c",&g);
while(j!='.')
{
printf ("\n** Ingrese otro caracter: ");
scanf ("%c",&j);
if (j==g)
{
cont++;
}
}
printf ("\n El caracter %c se conto %d veces.",g,cont);
return 0;
}

Y esto me muestra la consola:

Ingrese el caracter que se va a contar: d

** Ingrese otro caracter:
** Ingrese otro caracter: d

** Ingrese otro caracter:
** Ingrese otro caracter: d

** Ingrese otro caracter:
** Ingrese otro caracter: d

** Ingrese otro caracter:
** Ingrese otro caracter: .

El caracter d se conto 3 veces.

El segundo codigo cumple con su funcion ya que depende de que se ingrese el caracter '.'.

El primer codigo cumple con su funcion parcialmente, ya que no se puede ingresar el total de caracteres que se especifican, al parecer por que se ejecutan instrucciones pero no totalmente, en este caso la funcion scanf.

Ya que apenas estoy empezando no he podido solucionar este problema, por eso acudo a ustedes y ver si alguien puede ayudarme con esto... yo por el momento seguire buscando y si es que encuentro solucion a esto lo publicare aqui.

Sin mas por el momento gracias de antemano por su tiempo....

Roberto Hernández.
_________________
der Kobold Erko
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 314
Ubicación: Cono Sur

MensajePublicado: 12/11/2007 8:24 am
Título:

Una solución estándar sería esta:

Código:

#include <stdio.h>

int main(void)

{
    int suma,n,cont; /*Declaracion de variables*/
    char car; /*Declaracion de variables*/
    suma=0;
    cont=0;
    printf ("¿Cuantos digitos va a ingresar? ");
    scanf ("%d%*c",&n); /*Ingresar valor a "n"*/
    while (cont<n) /*Inicio de bucle*/
    {
        printf ("\n Ingrese un caracter: ");
        scanf ("%c%*c",&car); /*Ingresar valor a"car"*/
        suma+=(int)car;
        cont++;
    }
    printf ("\nLa suma de todos los caracteres es: %d\n",suma);
    return 0;
}


Un saludo
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3770
Ubicación: Mexico

MensajePublicado: 12/11/2007 8:42 am
Título:

El problema en ambos programas es el uso de la funcion scanf con el indicador de tipo "%c" y la forma como se procesa el bufer de la entrada estandar (stdin).

Esto ya se ha explicado en varias ocasiones en los foros y supongo que puedes encontrar alguna de esas explicaciones mediante el motor de busqueda buscando terminos como "bufer AND entrada AND estandar" y similares.

En el primer programa debes eliminar los caracteres del resto de la linea mediante un bucle while de esta forma:
Código:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int suma;
   int n;
   int cont;
   char car;
   
   suma = 0;
   cont = 0;
   
   printf ("Cuantos digitos va a ingresar? ");
   fflush(stdout);
   if (scanf("%d", &n) != 1)
      return EXIT_FAILURE;
   
   while (cont < n){
      /* Eliminamos el resto de la linea */
      {
         int ch;
         
         while ((ch = getchar()) != EOF && ch != '\n')
            ;
      }
     
      printf ("Ingrese un caracter: ");
      fflush(stdout);
      if (scanf("%c", &car) != 1)
         return EXIT_FAILURE;
     
      suma += (int) car;
      cont++;
   }
   
   printf ("La suma de todos los caracteres es: %d\n", suma);
   
   return EXIT_SUCCESS;
}


Las modificaciones al segundo programa son similares:
Código:
#include <stdio.h>
#include <stdlib.h>


int main(void)
{
   int cont;
   char g;
   char j;
   
   cont=0;
   
   printf("Ingrese el caracter que se va a contar: ");
   fflush(stdout);
   if (scanf ("%c", &g) != 1)
      return EXIT_FAILURE;
   
   do {
      /* Eliminar el resto de la linea de texto */
      {
         int ch;
         
         while ((ch = getchar()) != EOF && ch != '\n')
            ;
      }
     
      printf ("** Ingrese otro caracter: ");
      fflush(stdout);
      if (scanf("%c", &j) != 1)
         return EXIT_FAILURE;
     
      if (j == g)
         cont++;
   }while (j != '.');
   
   printf ("El caracter %c se conto %d veces\n", g, cont);
   
   return EXIT_SUCCESS;
}


Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
Roberto Hernández Sánchez



Registrado: 10 Nov 2007
Mensajes: 2
Ubicación: México

MensajePublicado: 12/11/2007 7:46 pm
Título: Ya esta trabajando... A leer se ha dicho...

Muchas gracias rir3760... ya esta trabajando el programa correctamente.... ahora a leer lo referente a este tema hasta que quede todo calro como el agua... Nuevamente muchas gracias a ambos...
_________________
der Kobold Erko
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com