0

I am coding in C in a university course and we got a project to take equations from the user and give solutions for matrices etc... My problem is that I am trying to use atof() function and for a reason I can't find in the same loop once it works and the other times it doesn't.

I have tried already other functions to replace atof like strtod but it doesn't work as well.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cstdbool>

void main()
{
    int num, check = 0,i,j,k=0,len1=0;
    char  equ[80],tempx[20],tempy[20], tempz[20], tempd[20];
    double *x, *y, *z, *d;
    printf_s("Number of equations (1-3): ");
    scanf_s("%d", &num);
    getchar();
    while (check == 0) //a check to see if we got a number between 1-3.
    {
        if (num > 0 && num < 4)
            check = 1;
        else
        {
            printf_s("Please enter a number between 1-3.\n");
            printf_s("Number of equations (1-3): ");
            scanf_s("%d", &num);
        }
    }
    x = malloc(sizeof(double)*num);
    if (!x) exit(1);
    y = malloc(sizeof(double)*num);
    if (!y) exit(1);
    z = malloc(sizeof(double)*num);
    if (!z) exit(1);
    d = malloc(sizeof(double)*num);
    if (!d) exit(1);
    for (i = 0; i < num; i++) //getting the equations and putting them into the matrix 
    {
        printf_s("Enter equation %d: ", i + 1);
        gets_s(equ, sizeof(equ));
        len1 = strlen(equ);

        for (j = 0; j <len1 ; j++)
        {
            if (equ[j] == 'x')
            {
                k = 0;
                while ((equ[j-k] != '+' || equ[j-k] != '-') && j-k>=0)
                {
                    tempx[j-k] = equ[j-k];
                    k++;
                }
                x[i] = atof(tempx);
            }
            else if (equ[j] == 'y')
            {
                k = 0;
                while ((equ[j-k] != '+' || equ[j-k] != '-') && j - k >= 0)
                {
                    tempy[j-k] = equ[j-k];
                    k++;
                }
                y[i] = atof(tempy);
            }
            else if (equ[j] == 'z')
            {
                k = 0;
                while ((equ[j - k] != '+' || equ[j - k] != '-') && j - k >= 0)
                {
                    tempz[j-k] = equ[j - k];
                    k++;
                }
                z[i] = atof(tempz);
            }
            else if (equ[j] == '=')
            {
                k = 0;
                while (equ[j+k])
                {
                    tempd[k] = equ[j + k];
                    k++;
                }
                d[i] = atof(tempd);
            }
        }
    }
    free(x);
    free(y);
    free(z);
    free(d);
}

I expected to get the same result in d[i] as I did in x[i] but every time I try to print d[i] I get 0.0000. When I tried the function _strrev on tempd inside atof I got the reverse result inside d[i].

Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278

1 Answers1

0

So the problem was that in the last loop i inserted a string that start with "=" and not a number. Apparently atof() doesn't work when the first char is not a number.