M12345b 2021-05-29 22:00 采纳率: 30%
浏览 17
已采纳

C语言 下面代码中哪有问题啊?

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include<pthread.h>

#define MAXSIZE 1024

typedef struct Queue {
    int front;
    int rear;
    char data[MAXSIZE];
}Queue;

Queue* initQueue() {
    Queue* Q = (Queue*)malloc(sizeof(Queue));
    Q->front = Q->rear = 0;
    return Q;
}
void* thread_push(void* arg);
void* thread_pop(void* arg);

void printQueue(Queue* Q) {
    // 队列当前元素个数
    int length = (Q->rear - Q->front + MAXSIZE) % MAXSIZE;
    int index = Q->front;
    for (int i = 0; i < length; i++) {
        printf("%s -> ", Q->data[index]);
        index = (index + 1) % MAXSIZE;
    }
    printf("NULL\n");
}

int isFull(Queue* Q) {
    if ((Q->rear + 1) % MAXSIZE == Q->front) {
        return 1;
    }
    else {
        return 0;
    }
}

int isEmpty(Queue* Q) {
    if (Q->front == Q->rear) {
        return 1;
    }
    else {
        return 0;
    }
}

int enQueue(Queue* Q, char data) {
    if (isFull(Q)) {
        return 0;
    }
    else {
        Q->data[Q->rear] = data;
        Q->rear = (Q->rear + 1) % MAXSIZE;
        return 1;
    }
}

char deQueue(Queue* Q) {
    if (isEmpty(Q)) {
        return -1;
    }
    else {
        char data = Q->data[Q->front];
        Q->front = (Q->front + 1) % MAXSIZE;
        return data;
    }
}
Queue* Q;
int main() {
    Q=initQueue();
    
    //创建两个线程
    pthread_t id[2];
    pthread_create(&id[0], NULL, thread_push, NULL);
    pthread_create(&id[1], NULL, thread_pop, NULL);
    //等待线程结束
    pthread_join(id[0], NULL);
    pthread_join(id[1], NULL);
    printQueue(Q);
    return 0;
}

void* thread_push(void* arg)
{
    int i;
    while (1)
    {
        char shuju[10] = { '0','1','0','3','5','4','7','6','9','\0' };
        int len = sizeof(shuju) / sizeof(shuju[0]);
        printf("len:%d\n", len);
        for (int i = 0; i < len; i++)
        {
            enQueue(Q, shuju[i]);
            sleep(1);
            printf("%s \n", Q->data[i]);
        }
    }
}

void* thread_pop(void* arg)
{
    int i = 0;
    while (1)
    {
        if (isEmpty(Q))
        {
            printf("队列为空\n");
            break;
        }
        else if (i < 10)
        {
            printf("%s\n", Q->data[i]);
            i++;
        }
    }
}

warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=] 

显示这个警告!!!!!
 

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-05-29 22:27
    关注

    warning一般没问题,

    27行:printf("%s -> ", Q->data[index]); data[index]是一个char类型,不应该用%s,后面的99行、116行都有这个问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理