NSolve, like some other Mathematica functions, does not assign a value to c when it finds the solution. Instead it returns a list of items that can be used for further calculations.
If you want to assign the value of the solution to c then
c=c/.NSolve[c/b==pK1/H && d/c==pK2/H && b==pK0 a && (a+b+c+d) 12==DIC, {a,b,c,d}][[1]]//Simplify
will do this. You can look up /. in the help system to try to understand how this works.
You can, for example use /. to replace all 1. t with t like this
c/.(1.t->t)
Mathematica keeps the values of assignments for later use, until you exit Mathematica or tell it to forget an assignment so remember that this happens.