문제

나는 약간의 문제에 봉착했습니다. 불행하게도 나는 아직 이 언어의 세부사항을 배우고 있는 중입니다.

다음 코드가 있습니다

#define SIZE 5
typedef struct 
{
    int start;
    int end;
    int nElements;
    int vetor[SIZE];
} TSTACK;

다음 함수를 사용하여 배열에 값을 삽입하려고 합니다.

void Push(TSTACK *s, int elementInsert)
{
    if(IsFull(s))
    {
        printf("%s\n", "# ERROR: full.");
    }
    else
    {
        s->end++;
        if(s->end == SIZE)
        {
            s->end = 0;
        }

        s->vetor[s->end] = elementInsert;
        s->nElements++;
    }
}

다음 함수를 사용하여 요소를 표시합니다.

void Display(TSTACK *s)
{
    int i;
    if (isEmpty(s))
    {
        printf("%s\n", "# ERROR: empty");
    }
    else
    {
        for (i = 0; i < s->nElements; i++) 
        {
            printf ("value: %d\n", s->vetor[i]);
        }
    }
}

내 질문은 다른 양의 요소를 추가하면 동일한 결과를 얻지 못한다는 것입니다. 5개의 요소를 삽입하면 Display 함수가 모든 요소를 ​​올바르게 표시하지만 5개 미만을 삽입하면 첫 번째 항목이 바늘:

4201166, 3, 5, 7의 주요 결과는 다음과 같습니다.

int main(void)
{
    TSTACK test;

    test.start = 1;
    test.end = 0;
    test.nElements = 0;

    Push(&test, 3);
    Push(&test, 5);
    Push(&test, 7);
    Push(&test, 3);

    Display(&test);
}

5, 3, 5, 7, 3의 주요 결과는 다음과 같습니다.

int main(void)
{
    TSTACK test;

    test.start = 1;
    test.end = 0;
    test.nElements = 0;

    Push(&test, 3);
    Push(&test, 5);
    Push(&test, 7);
    Push(&test, 3);
    Push(&test, 5);

    Display(&test);
}

누군가 내가 어디가 잘못되었는지 보여줄 수 있습니까?

도움이 되었습니까?

해결책

요소를 "삽입"할 때는 다음 위치에서 수행합니다.

s->vetor[s->end]

하지만 그 전에 당신은 증가하다 s->end, 이므로 첫 번째 요소는 s->vetor[1].첫 번째 요소(s->vetor[0])이 초기화되지 않으면 거기에 임의의 값이 생깁니다.이것이 바로 4개 값 삽입에서 이상한 값이 먼저 나타나는 이유입니다.

다섯 번째 값을 삽입하면 다음 사항이 확인됩니다. s->end == SIZE 당신이 설정한 곳 s->end 0으로 설정하면 이 경우 마지막 값이 배열의 첫 번째 위치에 있게 됩니다.

위의 두 가지 문제를 모두 해결하는 솔루션은 다음과 같습니다. s->end ~ 후에 배열에 값을 할당했습니다.

다른 팁

스택을 인쇄할 때:

for (i = 0; i < s->nElements; i++) 
{
    printf ("value: %d\n", s->vetor[i]);
}

인덱스 0에서 시작하지만 스택 구현은 인덱스 1에서 시작하므로 요소가 5개 미만인 경우 첫 번째 항목이 초기화되지 않습니다.아마도 시작 값을 0으로 변경하여 이 문제를 해결할 수 있을 것입니다.

첫 번째 문제:지역 변수는 초기화되지 않으며 초기화하지 않으면 가비지를 포함합니다.

두 번째 문제:0 대신 배열 인덱스 1에서 할당을 시작합니다.5개의 요소를 삽입할 때만 작동합니다. end == SIZE 그리고 그렇게 설정되면 end = 0, 다섯 번째 삽입물을 첫 번째 요소로 설정 vetor[0].

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top