用C编程队列,我的代码出错了

时间:2016-07-24 15:56:14

标签: c

尝试在C中编写一个程序,用于创建队列并允许用户添加值。使用数组设置队列。不知何故,我的代码无法运行,我想知道是否有人可以帮助我排除故障。

#include <stdio.h>

#define CAP 10

//define a struct for our queue
typedef struct _que
{
    int arr[CAP];
    int front;
    int size;
}
que;

void enqueue (que* ptr, int add);

int main(void)
{
    int i;
    que q1;
    q1.front = 0;
    q1.size = 0;
    char yn = 'n';
    //while loop for adding elements
    do
    {
        printf("Enter the value you wish to add\n");
        scanf("%d",&i);
        enqueue(&q1, i);
        printf("Would you like to add any more elements?\n");
        scanf("%c",&yn);
    }
    while (yn == 'y' && q1.size <= CAP);
    printf("The current element(s) in the queue are:");
    //TODO: print out elements in the queue
    for(int start = 0; start <= q1.size; start++)
    {
        printf("%d",q1.arr[start]);
    }
    printf("\n");
}

void enqueue(que* ptr, int add)
{
    ptr->arr[((ptr->front)+(ptr->size))] = add;
    ptr->size += 1;
}

程序正常执行到它打印的部分“你想添加更多的元素”,然后它跳出do-while循环并打印队列中的元素,这也是错误的吐出垃圾值,如217836276,可能表示内存问题

1 个答案:

答案 0 :(得分:0)

您的情况start <= q1.size错误且包含off-by-one error。它应该是start < q1.size

为避免将空白字符读取到yn,应在%c scanf(" %c",&yn);之前添加空格,以使scanf()跳过空白字符。

另请注意,条件q1.size <= CAP对于防止缓冲区溢出也是错误的,它应该是q1.size < CAP