Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ometeotl en 10 Octubre 2011, 18:21 pm



Título: ayuda con getchar
Publicado por: ometeotl 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
(http://i449.photobucket.com/albums/qq211/teotl/error.jpg)


Título: Re: ayuda con getchar
Publicado por: dewolo 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



Título: Re: ayuda con getchar
Publicado por: ometeotl 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


Título: Re: ayuda con getchar
Publicado por: dewolo 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;
}


Título: Re: ayuda con getchar
Publicado por: ometeotl 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


Título: Re: ayuda con getchar
Publicado por: rir3760 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


Título: Re: ayuda con getchar
Publicado por: ometeotl en 10 Octubre 2011, 19:46 pm
Ok rir3760, revisare tu ejemplo para analizarlo y entender mejor esto del getchar, gracias