2017-09-20 95 views
-1

我試圖正確地獲取這個程序的輸出,但是我無法做到。這是因爲我無法在行「printf(」輸入要插入的字符串= \ n「)之後的insert()函數中輸入任何字符串;」雖然我正在使用gets()和正確的頭文件。 我得到的輸出是這樣的:C中的循環隊列打印

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

一些焦炭殘留在標準輸入緩衝輸入之後(scanf函數不讀換行字符),要麼刷新標準輸入緩衝區fflush(stdin)或使用scanf("%s", add_item)

另外我想補充一點gets是容易緩衝區溢出問題你好得多使用fgets

+0

謝謝,男人!用scanf()替換獲取工作。但是,我仍然只能通過80%的測試用例來解決這個問題! –