尝试在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,可能表示内存问题
答案 0 :(得分:0)
您的情况start <= q1.size
错误且包含off-by-one error。它应该是start < q1.size
。
为避免将空白字符读取到yn
,应在%c
scanf(" %c",&yn);
之前添加空格,以使scanf()
跳过空白字符。
另请注意,条件q1.size <= CAP
对于防止缓冲区溢出也是错误的,它应该是q1.size < CAP
。