Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Especificar el ancho máximo ingresable en un arreglo

Estas en el tema de Especificar el ancho máximo ingresable en un arreglo en el foro de C/C++ en Foros del Web. Hola a todos. Lo que quiero aprender es hacer todos las funciones de la biblioteca string.h sin el uso de la misma.- El primer inconveniente ...
  #1 (permalink)  
Antiguo 27/08/2010, 11:09
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Especificar el ancho máximo ingresable en un arreglo

Hola a todos.
Lo que quiero aprender es hacer todos las funciones de la biblioteca string.h sin el uso de la misma.-
El primer inconveniente que me encuentro es el siguiente:
Con
Código:
int valor = 0;
scanf( "%10d", &valor );
logro especificar el ancho del campo(de enteros) pero en un arreglo no me lee el arreglo completo, es decir cuando encuentra un espacio graba hasta hay y el resto lo deja en el buffer de teclado(según lo que tengo leído), el caso es que gets si lee el arreglo completo pero no se puede especificar el ancho del campo.-
¿Alguien tiene idea si hay alguna solución para esto?

Muchos saludos.
Daniel
Lenguaje C - DEV-C++ - WINDOWS XP
  #2 (permalink)  
Antiguo 27/08/2010, 11:14
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 15 años
Puntos: 2
Respuesta: Especificar el ancho máximo ingresable en un arreglo

pon el resto del codigo, donde declaras el arreglo y eso
  #3 (permalink)  
Antiguo 27/08/2010, 11:59
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Especificar el ancho máximo ingresable en un arreglo

Hola
Gracias por interesarte en el tema.-

Código:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   char cadena[50];
   int cont=-1, cant=0;
   printf("\n\tIngrese una cadena -\n\tno mayor a 50 caracteres...: ");  
   gets(cadena);   

   while(++cont,cadena[cont]!='\0')
   {
      if(cadena[cont] !=32){cant++;}
   }
   
   printf("\n\tTotal de caracteres...: %d\n\n\t",cant);
   
   system("PAUSE");	
   return 0;
}
Saludos.
Daniel
  #4 (permalink)  
Antiguo 27/08/2010, 15:00
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 15 años
Puntos: 2
Respuesta: Especificar el ancho máximo ingresable en un arreglo

usa fgets. se usa asi
Código C:
Ver original
  1. fgets(cadena, caracteres, stdin); //carecteres es el max de caracteres que se leera
  2.                                                    // stdin indica que se lea desde el teclado
  #5 (permalink)  
Antiguo 27/08/2010, 18:51
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Especificar el ancho máximo ingresable en un arreglo

Hola stiwi222
Gracia amigo, en apariencia funciona perfecto.-

Saludos.
Daniel
  #6 (permalink)  
Antiguo 28/08/2010, 03:48
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 15 años
Puntos: 2
Respuesta: Especificar el ancho máximo ingresable en un arreglo

de nada daniel :). tambien podrias definir tu propia funcion de lectura desde el teclado, pero seria mas complicado
  #7 (permalink)  
Antiguo 28/08/2010, 05:11
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Especificar el ancho máximo ingresable en un arreglo

Hola stiwi222
Me podrías dar alguna idea, algún ejemplo o alguna página donde obtener información, me interesa.-

Muchas gracias.
Daniel
  #8 (permalink)  
Antiguo 28/08/2010, 09:05
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 15 años
Puntos: 2
Respuesta: Especificar el ancho máximo ingresable en un arreglo

sobre como definir tu propia funcion para la lectura?. si es asi puedes buscar informacion sobre stdin y stdout (standard in, standard out) y sobre fscanf, fprintf y fgets. si aprendes sobre ellos (cosa relativamente sencilla) podras imponer tu los limites del formateo de cadenas al imprimir por pantalla, o el tipo de valor a escanear y cunatos caracteres tomar de el teclado, por ejemplo.
  #9 (permalink)  
Antiguo 29/08/2010, 18:38
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Información Respuesta: Una ayudita mas

Hola stiwi222
De ser posible necesitaría una ayudita mas porque encontré en la web una manera de utilizar fgets con un while, el programa compila pero tiene 2 errores de lógica que no puedo solucionar.-

Código:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   char frase[21];
   int cont=-1; 
   printf("\n\t Ingresa una frase...: ");
   while(frase[++cont]!='\0' && fgets(frase, 20 , stdin))   
   {
      printf("\n\t Ingresaste...: %c  confirmar con <Enter> ",frase[cont]);  
   }
  
   system("PAUSE");	
   return 0;
}
Los 2 errores son:El segundo caracter no lo imprime nunca y ni con un if logre que
me corte en el último caracter siempre me inprime una linea mas.-

Espero puedan ayudarme a solucionarlo.-

Un gran abrazo.
Daniel
  #10 (permalink)  
Antiguo 02/09/2010, 16:38
 
Fecha de Ingreso: septiembre-2010
Mensajes: 60
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: Especificar el ancho máximo ingresable en un arreglo

Pues yo utilizaría, en vez de gets(), getchar(), ya que así se puede "simular un poco más facilmente" el comportamiento de scanf.
Otra opción es utilizar read() o fgets() leyendo de caracter en caracter.

Por cierto, esto de los "arreglos" me mata, me mata...
  #11 (permalink)  
Antiguo 02/09/2010, 18:03
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Especificar el ancho máximo ingresable en un arreglo

Hola abacusar
Tal ves no tuviste tiempo de leer el último post, yo uso fgets y por lo que tengo leído de aquí en mas la usare con exclusividad.-
La duda era como leer del archivo del teclado(buffer) implementando la lectura con un while y usando fgets, no me sale.-

Un gran saludo y gracias por tu tiempo.-
Daniel
  #12 (permalink)  
Antiguo 03/09/2010, 04:22
 
Fecha de Ingreso: septiembre-2010
Mensajes: 60
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: Especificar el ancho máximo ingresable en un arreglo

Ya, pero estás leyendo fgets() de 20 en 20 caracteres, y ese no es el comportamiento de scanf.
scanf() sólo "come" lo necesario, de manera que cuando ve que hay cosas que no necesita, las deja para la siguiente llamada a scanf().
Por ejemplo:

Entrada: 15 Hola

scanf("%d",...) -> Consumido: 15
scanf("%s",...) -> Consumido: Hola

En tu caso:
scan ("%d",..) -> Consumido 15 Hola

Es decir, no estás dejando las cosas en el buffer de teclado, como decías que querías hacer en tu primer post.
  #13 (permalink)  
Antiguo 06/09/2010, 10:47
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Especificar el ancho máximo ingresable en un arreglo

Hola abacusar
No tenia eso lo de poder sacar del buffer del teclado una frase con espacios utilizando scanf() y con un bucle como el que presento a continuación, solo que he intentado de varias manera pero no logro finalizar(salir) del mismo.-

Código:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   char frase[20];
   printf("\n\tIngrese una frase con espacios...:");

   while(1)
   {
      scanf("%s",frase);
      printf("\n\t%s\n\t",frase);
   }

   return 0;
}
Espero puedan ayudarme, ya que me resultaria muy importante para entender mas sobre el buffer del teclado.-

Cita:
Es decir, no estás dejando las cosas en el buffer de teclado, como decías que querías hacer en tu primer post.
Perdón por embarullarte, lo que quería era todo lo contrario.-

Un gran saludo para todos.
Daniel

Etiquetas: ancho, arreglos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:47.