Hola! tus problemas mas que nada son de conceptos:
1° toma en cuenta lo que dijo zonahurbana, ya que el codigo se va a reducir bastante
2° Creando las estructuras de esa manera estas declarando
variables globalesstruct lapiz {
int cantidad;
int diae;
int mese;
int anioe;
int dias;
int mess;
int años;
} l={0}; /*<---- variable global */
struct borra {
int cantidad;
int diae;
int mese;
int anioe;
int dias;
int mess;
int años;
} b={0}; /* <--- variable global */
/*...................*/
En el main volves a crear esas variables(con el mismo nombre) pero
locales...
Si usas variables globales no es necesario pasarselo a funciones como argumentos(de echo estaria mal). Si usas variables locales tenes que revisar el concepto de: "pasaje de variables por valor o por referencia"
Saludos
PD: usa la etiqueta GeSHi para colocar codigo