/
Inicio :: Foros

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

Strings y alertas

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Astrak



Registrado: 28 Ago 2009
Mensajes: 11

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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 Very Happy. Muchas gracias de nuevo!
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