gpt4 book ai didi

c - 用C语言编写队列,我的代码哪里出错了

转载 作者:行者123 更新时间:2023-11-30 16:58:48 25 4
gpt4 key购买 nike

尝试用 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 之类的垃圾值,可能表明存在内存问题

最佳答案

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

避免将空白字符读取到 yn%c 之前应添加一个空格喜欢 scanf(" %c",&yn);scanf()跳过空白字符。

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

关于c - 用C语言编写队列,我的代码哪里出错了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38553937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com