我试图正确地获得此程序的输出,但我无法做到。这是因为我无法在行" 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()
我真的很感激任何帮助。在此先感谢:)
答案 0 :(得分:0)
输入后,某些char仍保留在stdin缓冲区中(scanf不读取换行符),要么刷新stdin缓冲区fflush(stdin)
,要么使用scanf("%s", add_item)
另外我可能会补充一点,gets
容易出现缓冲区溢出问题,你最好使用fgets