gpt4 book ai didi

c - 数字生成器未在 C 中打印出预期的第一个数字

转载 作者:太空宇宙 更新时间:2023-11-04 08:50:46 25 4
gpt4 key购买 nike

所以我有这个生成器,应该输出的第一个数字是1804289383。

但是,我得到的是一个134519520的数字,有时最后几位数字会有所不同,但通常都在这个数字左右。

知道为什么吗?我用类似的代码打印出所需的数字,但这行不通。

#include <stdio.h>
#include <pthread.h>
#define MAX_NUM 10
#define MAX_RAND_NUM 100
#define SIZE 10

pthread_mutex_t the_mutex;
pthread_cond_t cond;
int buffer[SIZE];
int num_of_items = 0;

void *producer(void *ptr)
{
int i = 0;
int rand_num = 0;
int rear = 0;
srandom((unsigned int)0);


rand_num = random();
pthread_mutex_lock(&the_mutex);
while (num_of_items = SIZE) {
pthread_cond_wait(&cond,&the_mutex);
}//end of while loop
buffer[rear] = rand_num;
rear = (rear + 1) % SIZE;
num_of_items +=1;
printf("Producer on loop %d it stored %d \n",i,rand_num);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&the_mutex);

pthread_exit(0);
}

void *consumer(void *ptr)
{ int i = 0;
int rand_num = 0;
int front = 0;

pthread_mutex_lock(&the_mutex);
while (num_of_items == 0) pthread_cond_wait(&cond,&the_mutex);
printf("Consumer on loop %d it stored %d \n",i,buffer);
//buffer[0] = 0;
front = (front + 1) % SIZE;
num_of_items -= 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&the_mutex);

pthread_exit(0);
}

int main(int argc, char **argv)
{
pthread_t pro,con;
pthread_mutex_init(&the_mutex,0);
pthread_cond_init(&cond,0);

pthread_create(&con,0,consumer,0);
pthread_create(&pro,0,producer,0);
pthread_join(pro,0);
pthread_join(con,0);
pthread_cond_destroy(&cond);

pthread_mutex_destroy(&the_mutex);
}

最佳答案

问题是:

printf("Consumer on loop %d it stored %d \n",i,buffer);

buffer 衰减为一个指针,但您试图将其作为 int 打印出来。你得到的那个大数字是地址的整数表示。也许你打算做 buffer[i] 或其他事情。

这看起来也有点可疑:

while (num_of_items = SIZE)

可能应该是 ==

如果您的编译器没有就这两件事向您发出警告,您或许应该寻找更好的编译器,或者调高警告级别。

关于c - 数字生成器未在 C 中打印出预期的第一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19780518/

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