| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Roberto Hernández Sánchez
Registrado: 10 Nov 2007 Mensajes: 2 Ubicación: México
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |