c언어로 선형방정식의 해를 구하는 프로그램인데

조회수 763회
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
int main(void) {
    char* arr = (char*)malloc(sizeof(char) * 40);//equation pointer
    char* st[3] = { NULL, };//store manipulated pointer
    int len[3] = { 0, };//length of st[i]
    int i = 0, j = 0;
    float num[3] = { 0.0, }, ore[3] = { 0.0, }, ans;
    printf("Put your linear equation\n");
    scanf("%s", arr);
    int l = strlen(arr);

    arr = (char*)realloc(arr, sizeof(char)*l);

    for (i = 0;i<3;i++)
        st[i] = (char*)malloc(sizeof(char)*l);
    //sprintf를 이용하기 위해서는, 크기가 할당된 포인터 혹은
    //배열을 이용해야만 한다. 
    for (i = 0;i<l;i++) {
        while (arr[i]<48 || arr[i]>57)
            i++;
        num[j] = atof(arr + i);
        sprintf(st[j], "%.0f", num[j]);
        len[j] = strlen(st[j]);

        if (arr[i + len[j] - 1] >= 48 && arr[i + len[j] - 1] <= 57) {
            assert(arr[i + len[j] - 1]<48 || arr[i + len[j] - 1]>57);
            num[j] = atof(arr + i);
            sprintf(st[j + 1], "%.0f", num[j]);
            len[j + 1] = strlen(st[j]);
        }
        if (arr[i - 1] == '-') {
            num[j] = -1 * num[j];
            len[j]++;
        }
        printf("num[%d]=%.0f,st[%d]= %s,len[%d]=%d,i=%d\n", j, num[j], j, st[j], j, len[j], i);

        j++;
        if (j>2 && arr[l - 1] == 'x') break; // <---- Q1)
    }

    printf("arr[len[0]]= '%c', arr[len[0]+len[1]+1]='%c'\n", arr[len[0]], arr[len[0] + len[1] + 1]);
    if (arr[len[0]] == 'x') {
        ore[0] = num[0];
        ore[1] = num[1];
        ore[2] = num[2];
    }
    else if (arr[len[0]] == '=') {
        if (arr[len[0] + len[1] + 1] == 'x') {
            ore[0] = num[1];
            ore[1] = num[2];
            ore[2] = num[0];
        }
        else {
            ore[0] = num[2];
            ore[1] = num[1];
            ore[2] = num[0];
        }
    }
    else {
        ore[0] = num[1];
        ore[1] = num[0];
        ore[2] = num[2];
    }

    for (j = 0;j<3;j++)
        printf("ore[%d]=%.0f\n", j, ore[j]);
    ans = (ore[2] - ore[1]) / ore[0];
    printf("x=%.2f", ans);
    free(arr);
    for (i = 0;i<3;i++)
        free(st[i]);

    return 0;
}

여기에서,

Q1) 이라고 적어놓은 부분의 코드는 c=b+ax의 형태에서 해당 부분의 코드로 진입하지 않아 어거지로 설정해놓은 코드입니다. 왜 c=b+ax는 이 코드를 통과하지 못하는 건가요? 이를 해결하려면 어떻게 해야 하나요?

그리고,

각 계수 혹은 상수가 두 자리 이상의 정수가 될 경우, 제가 짠 코드에서는 이상이 발생합니다. 이를 해결하기 위해서 len[i]를 이용하는 방법도 써 봤습니다만, 소용이 없더군요. 이를 해결하려면 어떻게 해야 하나요?

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)