Почему функция atof не работает должным образом? - PullRequest
0 голосов
/ 18 апреля 2019

Я пишу код на языке 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 голосов
/ 19 апреля 2019

Итак, проблема заключалась в том, что в последнем цикле я вставил строку, начинающуюся с «=», а не числа. Очевидно, atof () не работает, когда первый символ не является числом.

...