为什么atof函数不能正常工作?

时间:2019-04-18 18:10:28

标签: c function atof

我在大学课程中使用C语言进行编码,我们得到了一个项目,可以从用户那里提取方程式,并提供矩阵等的解决方案... 我的问题是我正在尝试使用atof()函数,由于某种原因,一旦它可以正常工作,而其他时候却无法正常工作,就无法在同一个循环中找到。

我已经尝试过其他功能来代替atof之类的strtod,但是它不能正常工作。

#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);
}

我希望在d[i]中得到与在x[i]中得到的结果相同的结果,但是每次尝试打印d[i]时都得到0.0000。当我在_strrev内的tempd上尝试函数atof时,在d[i]内得到了相反的结果。

1 个答案:

答案 0 :(得分:0)

所以问题是在上一个循环中,我插入了一个以“ =”开头而不是数字的字符串。当第一个字符不是数字时,显然atof()不起作用。