¿Estás seguro de que puedes usar EOF ahí? Yo que tú inicializaría la variable unidades de algún modo(-1, por ejemplo) para poder usarla como comprobador, de modo que si unidades[j] == -1 es que articulo[j] no se ha usado aún...Yo es que no uso nunca EOF, pero no me suena que puedas usarlo así...
Ah, y si usas fgets como te dice ElCHabaldelPc(que a mi también me parece más fácil) te coge la línea entera, así que luego tendrias que usar sscanf(destino del fgets, "%s %d", destino(las variables articulo y unidades))...