gpt4 book ai didi

c - 为什么我每次出队时都会得到相同的号码?

转载 作者:行者123 更新时间:2023-11-30 16:50:15 24 4
gpt4 key购买 nike

我应该将一些整数排入队列,然后计算总和和平均值...

我相信我正确地将数据排队,但是当我出队时,我似乎得到了我排队的最后一个整数。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "queue.h"

int main(void)
{
int intgr;
int avg = 0;
int sum = 0;
int* dataPtr;
QUEUE* queue;
queue = createQueue();

printf("Enter 5 integers to calc sum and average:\n\n");

for(int i = 0; i < 5; i++)
{
intgr = (int*)malloc(sizeof(int));
printf("Enter a number:");
scanf("%d", &intgr);
dataPtr = &intgr;
enqueue(queue, dataPtr);
}

for(int i = 0; i < 5; i++)
{
dequeue(queue, (void*)&dataPtr);
printf("%d", *dataPtr);
sum += *dataPtr;
}

printf("Sum: %d\n", sum);
printf("Avg: %d\n", sum/5);

return 0;
}

我的出列操作:

bool dequeue(QUEUE* queue, void** itemPtr)
{
//Local Definitions
QUEUE_NODE* deleteLoc;

//Statements
if(!queue->count)
return false;

*itemPtr = queue->front->dataPtr;
deleteLoc = queue->front;
if(queue->count == 1 )
// Delete only item in queue
queue->rear = queue->front = NULL;
else
queue->front = queue->front->next;
(queue->count)--;
free(deleteLoc);

return true;
} // dequeue

最佳答案

您的数据指针设置不正确。这是完全错误的:

intgr = (int*)malloc(sizeof(int));

这不仅会因转换不当而标记出巨大的警告,而且无法保证它会起作用。此外,intgr 中的值稍后会被覆盖为:

scanf("%d", &intgr);

所以无论如何你都会泄漏内存,即使你平台上的int有可能足够大以容纳void*

你想做的是这样的:

int main(void)
{
int sum = 0;
QUEUE* queue = createQueue();

printf("Enter 5 integers to calc sum and average:\n\n");

for(int i = 0; i < 5; i++)
{
int value;
printf("Enter a number:");
scanf("%d", &value);

int *dataPtr = malloc(sizeof *dataPtr);
*dataPtr = value;
enqueue(queue, dataPtr);
}

for(int i = 0; i < 5; i++)
{
void *vptr = NULL;
dequeue(queue, &vptr);
if (vptr)
{
int *dataPtr = vptr;
printf("%d", *dataPtr);
sum += *dataPtr;
}
free(vptr);
}

printf("Sum: %d\n", sum);
printf("Avg: %d\n", sum/5);

return 0;
}

显然,应该有更多的错误检查、清理等工作,但我把这些留给你了。

您还有另一个问题,许多问题已经涵盖了该问题。 void* 是 C 中的无类型泛型指针类型。void** 不是某种指针到指针的泛型。后者是一种非常具体的类型(指向 void 的指针)。因此,你的 Actor 阵容不合适。上面的代码已经解决了这个问题,你应该仔细看看。

关于c - 为什么我每次出队时都会得到相同的号码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42259350/

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