Parabola calculations - follow-up
General: Do not use int for float values.
Either use float and float functions like sqrtf() or use double.
When fabs(b) is close to sqrt(discriminant), OP's approach suffers severe loss of precision due to the + or -.  More numerically stable code posted.  Still needs some divide by 0.0 checks.

//x1=(-b + sqrt(discriminant)) / (2*a);
//x2=(-b - sqrt(discriminant)) / (2*a);
float s = sqrtf(discriminant);
if (b &lt; 0) {
  x1 = (-b + s)/(2*a);
  x2 = c/x1;
} else if (b &gt; 0) {
  x2 = (-b - s)/(2*a);
  x1 = c/x2;
} else {
  x1 = s/(2*a);
  x2 = -x1;
}

pow(b, 2) - 4 * a * c; also suffers from severe loss of precession when b*b is about 4*a*c.  If OP is interested there are method to better calculate that too.  It comes down to how quick you want to write/execute the code versus the need for correctness on edge conditions.
Unclear format usage.  About 45% of all float numbers will print as 0.00 with "%.2f".  Suggest a more meaningful format  

   // printf("Vertex: V(%.2f,%.2f)\n", vx, vy);
   printf("Vertex: V(%e,%e)\n", vx, vy);

Dangerous code.  Nothing stop code from incrementing into la-la land.  If this A() and B() are only used in this controlled environment, make them static, else they should robustly handle all sorts of string inputs.

float A(const char* in) {
  ...
  while(in[i] != 'x'){ /* until x in found */
    i++; /* increment i */
  }

More weak code.  Nothing insures that c will be a string after the strncpy call.  Just use strtol() or strtof().

strncpy(c, in, i); /* copy first i characters of in to c */
return atoi(c);

Unclear why code is using atoi(), yet returning float.
Corner case: With b = atoi(c);, should c have the textual value of -INT_MIN, then assignment to b is UB.
Consider printing something when sign=='n'
Make a clean separation of parsing form quadratic calculation.  (2 functions)