这里是新手。我正在对 C 编程中的有界缓冲区问题进行分配。我尽可能不使用库来更好地理解解决方案。
到目前为止我有这个
#include <stdio.h>
#include <stdlib.h>
int mutex = 1;
int full = 0;
int empty = 10, buffer[10];
int i;
void producer()
{
--mutex;
++full;
--empty;
printf("\nProduce:");
scanf("%d", &buffer[i]);
i++;
++mutex;
}
void consumer()
{
--mutex;
--full;
++empty;
i=0;
printf("\nConsume: %d", buffer[i]);
i--;
++mutex;
}
int main()
{
int n, i;
printf("\n[1] Producer \n[2] Consumer \n[3] Exit");
for (i = 1; i > 0; i++)
{
printf("\nEnter your choice: ");
scanf("%d", &n);
switch (n)
{
case 1:
if ((mutex == 1) && (empty != 0))
{
producer();
}
else
{
printf("\nThe Buffer is full, please do not enter new data");
}
break;
case 2:
if ((mutex == 1) && (full != 0))
{
consumer();
}
else
{
printf("\nThe Buffer is empty, please consume new data");
}
break;
case 3:
exit(0);
break;
}
}
}
在这里,我将缓冲区设为接受输入的数组。我的问题是我想在
printf("\nConsume: %d", buffer[i]); i--;
中以递减顺序打印消费数据。我哪里做错了?很抱歉,我还在学习数组。
您可以使用 sizeof() 来查找当前缓冲区中的元素数量,然后在消费者函数中将 i 设置为该值。
size_t no_of_elements = sizeof(buffer)/sizeof(buffer[0]); i = no_of_elements;
然后在递减 i 的同时打印。
PS:你在消费者中设置了i=0,这可能会导致生产者代码中的值被覆盖。