elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda con getchar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con getchar  (Leído 5,456 veces)
ometeotl

Desconectado Desconectado

Mensajes: 4


Ver Perfil
ayuda con getchar
« en: 10 Octubre 2011, 18:21 pm »

estoy intentando hacer un programa básico para capturar el caracter, pero siempre me sale el mensaje de "default" y eso que introduzco el caracter correcto para el funcionamiento. El programa esta trabajando en conjunto con un switch y while...
Código:
/*Contador de palabras*/
#include <stdio.h>
#include <string.h>
main(){
       char grade;
       int acon=0,bcon=0,ccon=0,dcon=0,fcon=0;
       
       printf("\nIntroduzca la letra de la calificacion");
       printf("\nIntroduzca EOF para finalizar: ");
       
       while((grade=getchar())!=EOF){
                                    switch(grade){
                                                  case 'A' : case 'a':
                                                       ++acon;
                                                       break;
                                                  case 'B' : case 'b':
                                                       ++bcon;
                                                       break;
                                                  case 'C' : case 'c':
                                                       ++ccon;
                                                       break;
                                                  case 'D' : case 'd':
                                                       ++dcon;
                                                       break;
                                                  case 'F' : case 'f':
                                                       ++fcon;
                                                       break;
                                                  default:
                                                          printf("\n\nEntrada invalidad");
                                                          printf("\nIntroduzca letra de una calificacion: ");
                                                          break;
                                                          }
                                                          }
       printf("\nEl total de cada calificacion es:");
       printf("\nA: %d",acon);
       printf("\nB: %d",bcon);
       printf("\nC: %d",ccon);
       printf("\nD: %d",dcon);
       printf("\nF: %d",fcon);
       
       return 0;
       }
dejo una imagen dela ejecución, igual cuando escribo EOF en vez de terminar me marca el mismo error y tres veces



En línea

dewolo

Desconectado Desconectado

Mensajes: 83


Ver Perfil
Re: ayuda con getchar
« Respuesta #1 en: 10 Octubre 2011, 18:32 pm »

http://foro.elhacker.net/programacion_cc/iquestpara_que_sirve_la_funcion_getchar-t200224.0.html

estas escribiendo eof? pone otra cosa algo asi como '\n' osea cuando apretes un salto de linea



En línea

ometeotl

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: ayuda con getchar
« Respuesta #2 en: 10 Octubre 2011, 18:37 pm »

Gracias, ya quedo y se resolvio el error, pero ahora cuando escribo otro caracter no sale el mensaje de default, me manda al break instantaneamente
En línea

dewolo

Desconectado Desconectado

Mensajes: 83


Ver Perfil
Re: ayuda con getchar
« Respuesta #3 en: 10 Octubre 2011, 18:54 pm »

plantea las condiciones de salida del while de forma diferente, asi por ejemplo..
Citar

while(1)
{

      grade=getchar();
                                    switch(grade){
                                                  case 'A' : case 'a':
                                                       ++acon;
                                                       break;
                                                  case 'B' : case 'b':
                                                       ++bcon;
                                                       break;
                                                  case 'C' : case 'c':
                                                       ++ccon;
                                                       break;
                                                  case 'D' : case 'd':
                                                       ++dcon;
                                                       break;
                                                  case 'F' : case 'f':
                                                       ++fcon;
                                                       break;
                                                  default:
                                                          printf("\n\nEntrada invalidad");
                                                          printf("\nIntroduzca letra de una calificacion: ");
                                                          break;
                                                          }

               if(grade=='s') break;
}
« Última modificación: 10 Octubre 2011, 18:56 pm por dewolo » En línea

ometeotl

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: ayuda con getchar
« Respuesta #4 en: 10 Octubre 2011, 19:05 pm »

gracias, pero logre resolverlo, borre el mensaje de entrada invalida, y lo deje en limpio, cuando escribo algo diferente solo me repite el mensaje de introducir letra.
Quedo de esta forma.
Código:
while((grade=getchar())!='Z'){
                                    switch(grade){
                                                  case 'A' : case 'a':
                                                       ++acon;
                                                       break;
                                                  case 'B' : case 'b':
                                                       ++bcon;
                                                       break;
                                                  case 'C' : case 'c':
                                                       ++ccon;
                                                       break;
                                                  case 'D' : case 'd':
                                                       ++dcon;
                                                       break;
                                                  case 'F' : case 'f':
                                                       ++fcon;
                                                       break;
                                                  default:
                                                          printf("\nIntroduzca letra de una calificacion: ");
                                                          break;
                                                          }
                                                          }
Muchas gracias por la aclaracion del getchar
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: ayuda con getchar
« Respuesta #5 en: 10 Octubre 2011, 19:37 pm »

Los problemas son varios.

Los tecnicos son dos: el primero que debes declarar la variable "grade" con el tipo "int" ya que ese es el valor de retorno de "getchar". Tambien debes tener en cuenta que todos los caracteres seran procesados, por ejemplo si tecleas:
Código:
A{ENTER}
El caracter 'A' se contabiliza asi como el caracter '\n' (generado por el {ENTER}) resultara en el mensaje de "entrada no valida".

Otro error es el EOF, no puedes simplemente teclear:
Código:
EOF{ENTER}
En su lugar la señal de fin de archivo se genera dependiendo del SO, en una linea en blanco debes utilizar la combinacion de teclas {CONTROL} + 'Z' (MS Windows) o {CONTROL} + 'd' (Linux + Bash).

Un programa sencillo para practicar:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int ch;
  7.  
  8.  
  9.   while (1){
  10.      printf("Teclea un caracter: ");
  11.      fflush(stdout);
  12.  
  13.      if ((ch = getchar()) != EOF){
  14.         printf("El caracter es %c\n", ch);
  15.  
  16.         /* Descartamos el resto de la linea */
  17.         while ((ch = getchar()) != EOF && ch != '\n')
  18.            ; /* Nada que hacer */
  19.      }else
  20.         break;
  21.   }
  22.  
  23.   return EXIT_SUCCESS;
  24. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
ometeotl

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: ayuda con getchar
« Respuesta #6 en: 10 Octubre 2011, 19:46 pm »

Ok rir3760, revisare tu ejemplo para analizarlo y entender mejor esto del getchar, gracias
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
getchar() != EOF
Programación C/C++
Treppe 6 15,490 Último mensaje 20 Julio 2011, 21:48 pm
por rir3760
Ayuda con getchar
Programación C/C++
prometheus48 6 3,370 Último mensaje 31 Diciembre 2011, 21:36 pm
por Unbr0ken
Borrar buffer , como funciona getchar
Programación C/C++
Jomad205 2 10,608 Último mensaje 13 Noviembre 2012, 17:23 pm
por Jomad205
Ayuda con getchar:(
Programación C/C++
TopoJunior 5 3,688 Último mensaje 14 Febrero 2013, 20:53 pm
por durasno
Problema con while y getchar.
Programación C/C++
Spinerker 3 2,822 Último mensaje 17 Octubre 2013, 14:18 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines