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

Restringir numero maximo de caracteres

Estas en el tema de Restringir numero maximo de caracteres en el foro de C/C++ en Foros del Web. Hola, miren estoy haciendo un programa tipo caja registradora donde se ingresan datos el caso es que en cierta parte donde ingreso codigos y nombres ...
  #1 (permalink)  
Antiguo 26/10/2014, 10:51
 
Fecha de Ingreso: diciembre-2012
Ubicación: Jardim Alegre
Mensajes: 25
Antigüedad: 11 años, 3 meses
Puntos: 0
Pregunta Restringir numero maximo de caracteres

Hola, miren estoy haciendo un programa tipo caja registradora donde se ingresan datos el caso es que en cierta parte donde ingreso codigos y nombres estos tienen que tener un numero maximo determinado de caracteres, como estos pueden ser tanto letras como numeros y lestras, mi pregunta es como hacer para que cuando ingrese mas del numero de caracteres permitido me de error y deben ponerlo de nuevo, la repeticion se que es con un do, pero nose como restringir a x numero de caracteres, se que cuando son numeros es mas facil, solo un scanf e if, pero cuanso es alfanumerico o solo con letras?

les dejo el problema:

Captura de artículo deseado, cuyos campos deberán de ser:
Cantidad del artículo (máximo 10 artículos), si es más de 10 no se acepta el número y vuelve a preguntar la cantidad.
Código del artículo (5 dígitos)
Nombre del artículo (25 caracteres)

mi codigo
Código:
do{
printf("Ingrese cantidad de articulos: ");
scanf("%d", &can);
if(can>10){
printf("Error, la cantidad no debe ser mayor a 10\n");
printf("Ingrese de nuevo \n");
}
}while(can>10);
printf("Ingrese codigo del articulo: ");
scanf("%s", &cod);
printf("Ingrese nombre del articulo: ");
scanf("%s", &nom);
printf("Ingrese costo unitario del articulo: ");
scanf("%d", &cost);
como ven la parte del numero de articulos ya esta, pero no entiendo como hacer lo mismo en nombre y codigo en caso de ser letras conumeros o solo letras.

Espero me entienda.
gracias de antemano.
  #2 (permalink)  
Antiguo 27/10/2014, 06:51
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Restringir numero maximo de caracteres

Tienes que limitar la lectura con fgets para que funcione; te dejo un ejemplo de funcion para que veas como implementarlo:

Código C:
Ver original
  1. char get_string(char *buffer, int bffsz, char *titulo) {
  2.     char c;
  3.     int excede;
  4.  
  5.     while(1) {
  6.         printf(titulo);
  7.  
  8.         //lee de stdin
  9.         if(fgets(buffer, bffsz, stdin) != 0) {
  10.  
  11.             //entrada positiva
  12.             if(strlen(buffer) < bffsz-1) {
  13.                 printf("<entrada positiva>\n\n");
  14.                 return 0;
  15.             }
  16.  
  17.             //posible entrada negativa
  18.             //recupero los caracteres dejados en el stdin
  19.             excede = 0;
  20.             while((c = getchar()) != EOF && c != '\n') {
  21.                 excede++;
  22.             }
  23.  
  24.             //si no hay caracteres textuales será una falsa entrada negativa
  25.             if(excede == 0) {
  26.                 printf("<falsa entrada negativa>\n\n");
  27.                 return 0;
  28.             }
  29.  
  30.             //en cualquier otro caso es una entrada negativa
  31.             //en buffer tienes los datos truncados a bffsz caracteres
  32.             printf("<entrada negativa, excede en %d caracteres>\n\n", excede);
  33.         }
  34.     }
  35.  
  36.     return 1;
  37. }

Lo he comentado dentro del codigo. Ten en cuenta que fgets siempre deja un \0 final, es decir que si lo limitas a 10 caracteres habra 9 de significativos mas el \0 final; ten en cuenta tambien que fgets retorna nulo en caso de error de lectura (no se considera error el truncado de caracteres).

Ahora un ejemplo de llamada:

Código C:
Ver original
  1. char bff[10];
  2. if(!get_string(bff, 10, "Dime una frase (max 9 chars): ")) {
  3.     printf("Acepto %s\n", bff);
  4. }
  5. else {
  6.     //se produjo un error en la lectura de datos
  7.     //comprovar feof(stdin) y ferror(stdin)
  8. }

Tambien puedes hacerlo directamente con getchar recuperando el nº de caracteres o hasta encontrar EOF o enter (\n), si despues de esto no queda el stdin vacío es que el usuario se excedio de caracteres (es lo que hago en la funcion para verificar el estado del buffer de stdin).

Espero que te sea de ayuda

Saludos
vosk

Etiquetas: letras, restringir
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 01:00.