2017-09-20 2 views
-1

J'essaie d'obtenir la sortie de ce programme correctement, mais je ne suis pas en mesure de le faire. C'est parce que je ne suis pas en mesure d'entrer une chaîne dans la fonction insert() après la ligne "printf (" Entrez la chaîne à insérer = \ n ");" bien que j'utilise gets() avec le fichier d'en-tête approprié. La sortie je reçois quelque chose comme ceci:Impression de file d'attente circulaire en 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 

Le programme que j'ai écrit comme suit:

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

Je voudrais vraiment apprécier toute aide. Merci d'avance :)

Répondre

0

Certains omble chevalier dans la mémoire tampon de stdin après votre entrée (scanf ne lit pas nouvelle ligne char), soit vider la mémoire tampon de stdin fflush(stdin) ou utilisez scanf("%s", add_item)

Aussi je pourrais ajouter que gets est sujette à problèmes de débordement tampon vous êtes beaucoup mieux d'utiliser fgets

+0

Merci, man! Remplacement obtient avec scanf() travaillé. Mais encore, je suis seulement capable de passer 80% des cas de test pour ce problème! –