用C语言打印循环队列

时间:2017-09-20 03:11:17

标签: c data-structures queue

我试图正确地获得此程序的输出,但我无法做到。这是因为我无法在行" printf("输入要插入的字符串= \ n")之后的insert()函数中输入任何字符串; " 虽然我使用带有正确头文件的gets()。 我得到的输出是这样的:

Choice 1 : Enter element into Queue 
Choice 2 : Delete element from Queue 
Choice 3 : Display 
Any other choice : Exit 
Enter your choice
1
Enter the string to be inserted =  
Choice 1 : Enter element into Queue 
Choice 2 : Delete element from Queue 
Choice 3 : Display 
Any other choice : Exit 
Enter your choice
1
Enter the string to be inserted =  
Choice 1 : Enter element into Queue 
Choice 2 : Delete element from Queue 
Choice 3 : Display 
Any other choice : Exit 
Enter your choice
1
Enter the string to be inserted =  
Choice 1 : Enter element into Queue 
Choice 2 : Delete element from Queue 
Choice 3 : Display 
Any other choice : Exit 
Enter your choice
3
The contents of the queue are 



Choice 1 : Enter element into Queue 
Choice 2 : Delete element from Queue 
Choice 3 : Display 
Any other choice : Exit 
Enter your choice
2
Deleted string is =

Choice 1 : Enter element into Queue 
Choice 2 : Delete element from Queue 
Choice 3 : Display 
Any other choice : Exit 
Enter your choice
3
The contents of the queue are 


Choice 1 : Enter element into Queue 
Choice 2 : Delete element from Queue 
Choice 3 : Display 
Any other choice : Exit 
Enter your choice
2
Deleted string is =

Choice 1 : Enter element into Queue 
Choice 2 : Delete element from Queue 
Choice 3 : Display 
Any other choice : Exit 
Enter your choice
3
The contents of the queue are 

Choice 1 : Enter element into Queue 
Choice 2 : Delete element from Queue 
Choice 3 : Display 
Any other choice : Exit 
Enter your choice
2
Deleted string is =

Choice 1 : Enter element into Queue 
Choice 2 : Delete element from Queue 
Choice 3 : Display 
Any other choice : Exit 
Enter your choice
3
Queue is empty 
Choice 1 : Enter element into Queue 
Choice 2 : Delete element from Queue 
Choice 3 : Display 
Any other choice : Exit 
Enter your choice
4

我写的程序如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 5

int front = 0;
int rear = -1;
char queue_array[MAX][30];

void insert();
void Delete();
void display();

int main()
{
    int choice;
    while(1)
    {
        printf("Choice 1 : Enter element into Queue\n");
        printf("Choice 2 : Delete element from Queue\n");
        printf("Choice 3 : Display\n");
        printf("Any other choice : Exit\n");
        printf("Enter your choice\n");
        scanf("%d", &choice);
        switch(choice)
        {
            case 1: insert();
                    break;
            case 2: Delete();
                    break;
            case 3: display();
                    break;
            default:exit(0);
        } // End of switch()
    } // End of while()
} // End of main()

void insert()
{
    char add_item[30];
    if((front == 0 && rear == MAX - 1) || (front != 0 && rear == front - 1))
        printf("Queue is full\n");
    else
    {
        printf("Enter the string to be inserted = \n");
        gets(add_item);
        if(rear == MAX - 1 && front != 0)
        {
            rear = 0;
            strcpy(queue_array[rear], add_item);
        }
        else
        {
            rear = rear + 1;
            strcpy(queue_array[rear], add_item);
        }
    }
}

void Delete()
{
    char del_item[30];
    if(front == 0 && rear == -1)
    {
        printf("Queue is empty\n");
        return;
    }
    if(front == rear)
    {
        strcpy(del_item, queue_array[front]);
        front = 0;
        rear = -1;
    }
    else if(front == MAX - 1)
    {
        strcpy(del_item, queue_array[front]);
        front = 0;
    }
    else
    {
        front = front + 1;
        strcpy(del_item, queue_array[front]);
    }
    printf("Deleted string is =\n");
    puts(del_item);
} // End of delete()

void display()
{
    int i, j;
    if(front == 0 && rear == -1)
    {    
        printf("Queue is empty\n");
        return;
    }
    printf("The contents of the queue are ");
    if(front > rear)
    {
        for(i = 0; i <= rear; i++)
            puts(queue_array[i]);
        for(j = front; j < MAX - 1; j++)
            puts(queue_array[j]);
    }
    else
    {
        for(i = front; i <= rear; i++)
            puts(queue_array[i]);
    }
    printf("\n");
} // End of display()

我真的很感激任何帮助。在此先感谢:)

1 个答案:

答案 0 :(得分:0)

输入后,某些char仍保留在stdin缓冲区中(scanf不读取换行符),要么刷新stdin缓冲区fflush(stdin),要么使用scanf("%s", add_item)

另外我可能会补充一点,gets容易出现缓冲区溢出问题,你最好使用fgets