循环队列输出杨辉三角时循环不能停止,求帮助

问题遇到的现象和发生背景

上机课时,用循环队列输出杨辉三角时循环不能停止,求帮助!

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<malloc.h>
#define max 100
typedef int elemtype;
typedef struct
{
    elemtype data[max];
    int front,rear;
} sqqueue;
void initqu(sqqueue *&qu)
{
    qu=(sqqueue *)malloc(sizeof(sqqueue));
    qu->front=qu->rear=0;
}
bool enqu(sqqueue *&qu,elemtype e)
{
    if((qu->rear+1)%max==qu->front)
        return false;
    else
    {
        qu->rear=(qu->rear+1)%max;
        qu->data[qu->rear]=e;
        return true;
    }
}
bool dequ(sqqueue *&qu,elemtype &e)
{
    if(qu->front==qu->rear)
        return false;
    else
    {
        qu->front=(qu->front+1)%max;
        e=qu->data[qu->front];
        return true;
    }
}
int main()
{
    sqqueue *qu;
    int i,N,n,x,y,t;
    initqu(qu);
    printf("输入杨辉三角的行数:");
    scanf("%c",&N);
    enqu(qu,1);
    printf("%3d\n",1);
    for(n=2;n<N;n++)
    {
        x=0;
        for(i=1;i<n;i++)
        {
            dequ(qu,y);
            t=x+y;
            printf("%3d",t);
            enqu(qu,t);
            x=y;
        } 
        printf("%3d\n",1);
        enqu(qu,1);
    } 
    return 0;
}

运行结果及报错内容

循环不能停止

img

我的解答思路和尝试过的方法

试过多种方法都未改变

简单改了下,错误给你标出来了,功能留给你自己完善了

希望能帮到你


#include<stdio.h>
#include<malloc.h>
#define max 100
typedef int elemtype;
typedef struct
{
    elemtype data[max];
    int front,rear;
} sqqueue;
//形参不需要地址操作符 sqqueue *&qu  改为 sqqueue *qu 
void initqu(sqqueue *qu)
{
    qu=(sqqueue *)malloc(sizeof(sqqueue));
    qu->front=qu->rear=0;
}
//形参不需要地址操作符 sqqueue *&qu  改为 sqqueue *qu 
//bool 改为int 
int enqu(sqqueue *qu,elemtype e)
{
    //第一次调用 
    //qu->{.data[100]={},.front=0,.rear=0}  e->1 
    //2%100->2  != 0  条件不符合 走else   
    
    //第二次调用 
    //qu->{.data[100]={ [2]=>1 },.front=1,.rear=2} e->1  返回true
    // 3%100->3 !=1  条件不符合 走else 
    if((qu->rear+1)%max==qu->front)
        return 0;
    else
    {
        qu->rear=(qu->rear+1)%max;//qu->{.data[100]={},.front=0,.rear=2}  e->1   第二次调用 qu->{.data[100]={[2]=>1 },},.front=1,.rear=3}  e->1
        qu->data[qu->rear]=e;//qu->{.data[100]={ [2]=>1 },.front=0,.rear=2}  e->1  第二次调用 qu->{.data[100]={[2]=>1,[3]=>1 },},.front=1,.rear=3}  e->1
        return 1;
    }
}
//形参不需要地址操作符 sqqueue *&qu  改为 sqqueue *qu   elemtype &e 改为*e 
//bool 改为int 
int dequ(sqqueue *qu,elemtype *e)
{
    //qu->{.data[100]={ [2]=>1 },.front=0,.rear=2}  
    //不符合走else 
    if(qu->front==qu->rear)
        return 0;
    else
    {
        qu->front=(qu->front+1)%max;//qu->{.data[100]={ [2]=>1 },.front=1,.rear=2}
        (*e)=qu->data[qu->front];//使用指针接收 e->1 
        return 1;
    }
}
int main()
{
    sqqueue *qu;
    int i,N,n,x,y,t;
    initqu(qu);//qu->{.data[100]={},.front=0,.rear=0} 
    printf("输入杨辉三角的行数:");
    scanf("%c",&N);//假如输入3 
    enqu(qu,1);//qu->{.data[100]={ [2]=>1 },.front=0,.rear=2}  返回true 
    printf("%3d\n",1); 
    for(n=2;n<N;n++)
    {
        x=0;
        for(i=1;i<n;i++)
        {
            //qu->{.data[100]={ [2]=>1 },.front=0,.rear=2}  返回true 
            //  y是一个函数回写的变量 传地址进去 函数用指针接收 
            dequ(qu,&y);//qu->{.data[100]={ [2]=>1 },.front=1,.rear=2}   y->1
            t=x+y;//t=0+1 t->1
            printf("%3d",t);// 1
            enqu(qu,t);//qu->{.data[100]={[2]=>1,[3]=>1 },},.front=1,.rear=3}
            x=y;//x->1
        } 
        printf("%3d\n",1);
        enqu(qu,1);
    } 
    return 0;
}

img

最后可以参考下这个 http://c.biancheng.net/view/495.html

scanf("%d",&N);
用%c的话N保存是9的ascii码了