2017-09-20 15 views
-1

Ich versuche, die Ausgabe dieses Programms richtig zu bekommen, aber ich bin nicht in der Lage. Das liegt daran, dass ich keine Zeichenfolge in der Funktion insert() nach der Zeile eingeben kann "printf (" Geben Sie die einzufügende Zeichenfolge ein = \ n ");" obwohl ich gets() mit der richtigen Header-Datei verwendet. Der Ausgang Ich bin immer so etwas wie dieses:Drucken der zirkulären Warteschlange in 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 

Das Programm, das ich geschrieben habe, ist wie folgt:

#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() 

ich wirklich jede mögliche Hilfe schätzen würde. Vielen Dank im Voraus :)

Antwort

0

Einige char bleibt im stdin Puffer nach dem Eingang (scanf nicht Newline Zeichen nicht lesen), entweder spülen Sie den stdin Puffer fflush(stdin) oder scanf("%s", add_item)

Auch verwende ich möchte hinzufügen, dass gets ist anfällig für Pufferüberlauf Probleme Sie sind viel besser dran mit fgets

+0

Danke, Mann! Ersetzen von Gets mit scanf() funktioniert. Trotzdem kann ich nur 80% der Testfälle für dieses Problem passieren! –

Verwandte Themen