| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Astrak
Registrado: 28 Ago 2009 Mensajes: 11
| Publicado: 10/05/2011 9:50 am | | | Título: Strings y alertas |
| Necesito hacer una función que lea el teclado hasta un enter, devuelva la cadena, y pite por cada dato de más leído. Hasta ahora solo he conseguido o que me pite una vez o que me haga un bucle infinito de pitidos jaja, lo demás va bien, pero los pitidos son mi gran problema. He estado comprobando la posibilidad de usar un strlen para contar la cadena total pero no se me ocurre como hacerlo factible, hasta ahora este es el código fuente de la función:
| Código: | void getns(){
char c, cadns[MAXNUM];
int i, max=0, con=0;
printf("Introduce el contenido de la cadena\n"); scanf("%c",&c);
for(i=0; i<MAXNUM && c!='\n';i++){ cadns[i]=c; scanf("%c",&c); con++; } if(c!='\n'){ max++; for(;con<max;con++){ printf("\a"); } cadns[i]='\0'; printf("\n<%s>\n", cadns); } |
|
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 7517 Ubicación: Mexico
| Publicado: 10/05/2011 10:43 am | | | Título: Re: Strings y alertas |
| | Astrak escribió: | | Necesito hacer una función que lea el teclado hasta un enter, devuelva la cadena, y pite por cada dato de más leído. |
¿Al momento en que cada caracter es introducido?
Si es asi no es posible con solo C estandar ya que la entrada (usualmente, si recuerdo bien) solo se procesa cuando se introduce un avance de linea. En su lugar pueden utilizarse funciones parte del API de MS Windows (Win32 API) o bien una biblioteca de terceros como conio.
En cuanto a la funcion esta se puede mejorar bastante ademas de que tiene algunos errores. Para realizar una pausa se puede utilizar la funcion Sleep (Win32 API).
Un ejemplo sin utilizar extensiones (mas que Sleep) estaria limitado a (literalmente) imprimir un pitido por cada caracter extra pero solo despues que la linea fuera procesada al introducirse el caracter '\n' (en MS Windows en base a la tecla {ENTER}).
Otro detalle del programa es que un caracter de la linea debe reservarse para el terminador de la cadena (el '\0').
El programa:
| Código: | #include <stdio.h> #include <stdlib.h> #include <windows.h>
#define NUM_CHARS 4
void getns(void);
int main (void) { getns(); return EXIT_SUCCESS; }
void getns (void) { char linea[NUM_CHARS]; int i; int ch; printf("Cadena: "); fflush(stdout); i = 0; while (i < NUM_CHARS-1 && (ch = getchar()) != EOF && ch != '\n'){ linea[i] = ch; i++; } linea[i] = '\0'; while (ch != EOF && ch != '\n'){ putchar('\a'); Sleep(1000); ch = getchar(); } } |
Un saludo _________________ 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 |
| | Volver arriba | |  | Astrak
Registrado: 28 Ago 2009 Mensajes: 11
| Publicado: 10/05/2011 1:04 pm | | | Título: |
| Buah, muchas gracias. No era exactamente lo que pedia, pero gracias a eso me he hecho una idea y ya me ha salido, sigo con el programa . Muchas gracias de nuevo! |
| | 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
|
|
| |