2016-11-23 4 views
0

Meine Idee ist es, dieses Programm zu machen, um die Nummer (beginnend von 1001) bis 10 loop.Abschließend zur gleichen Zeit alle zweimal Schleife. Ich möchte, dass es die erste Zahl einfügen löscht. Danach wird die Nummer nach der letzten Nummer eingefügt. Beispielsweise. (0) Einfügen 1001, (1) Einfügen 1002, (2) Löschen 1001, (3) Einfügen 1003, (4) Einfügen 1004, (5) Löschen 1002. Das ist was ich mir vorstelle und die Wunschausgabe. Aber jetzt. Wenn es gelöscht wird, wird es auf die ursprüngliche Nummer zurückgesetzt.Warum wird das Array nicht fortgesetzt, wo die letzte Nummer eingefügt wird?

#include <stdio.h> 
#define MAX 10 /* The maximum size of the queue */ 
#include <stdlib.h> 

void insert(int queue[], int *rear, int value) 
{ 
    if(*rear < MAX-1) 
    { 
     *rear= *rear +1; 
     queue[*rear] = value; 
     printf("\n%d queue at counter 1",value); 
    } 
    else 
    { 
     printf("\nThe queue is full can not insert a value\n"); 
     exit(0); 
    } 
} 
void delete(int queue[], int *front, int rear, int * value) 
{ 
    if(*front == rear) 
    { 
     printf("\nThe queue is empty can not delete a value\n"); 
     exit(0); 
    } 
    *front = *front + 1; 
    *value = queue[*front]; 
    printf("\n%d left counter 1",*value); 
} 

int main() 
{ 
    int queue[MAX]; 
    int iCounter,front,rear,loop=0,a,b,c; 
    front=rear=-1; 
    a=1001; 

    do{ 
     printf("\n------------------------------"); 
     printf("\n\tWelcome!!\n"); 
     printf("\n------------------------------"); 
     printf("\nPress which counter you prefer"); 
     printf("\n1-Pay bill"); 
     printf("\n2-Check up"); 
     printf("\n3-QnA"); 
     printf("\n------------------------------\n"); 
     scanf(" %d",&iCounter); 
     loop++; 

     switch(iCounter) 
     { 
      case 1: 
       insert(queue,&rear,a); 
       a++; 
       break; 
      default: 
       printf("\nError input!"); 
       break; 
     } 

     while(loop==2) 
     { 
      delete(queue,&front,rear,&a); 
      loop=0; 
     } 

    }while(rear<MAX-1); 

    return 0; 
} 
+0

Können Sie Bitte schreibe deine Erklärung um, sie ist nicht sehr beschreibend und es fällt mir schwer zu verstehen, was du sagen willst. –

+0

Fügen Sie auch Front in Ihrer Einfügefunktion ein, wie ursprünglich für das erste Element sollte es auf 0 gesetzt werden. – sas

+0

Ich sehe nicht, was Ihr Programm versucht zu erreichen. Sie zählen nur vorne und hinten, also nach maximal 10 Aufrufen von 'Einfügen' könnten Sie keinen weiteren hinzufügen, weil Sie nie hinten in löschen, Sie zählen nur vorne ... auch Sie, wenn Sie etwas löschen, wird sein setze wieder auf den ersten Wert. Der nächste hinzugefügte Wert ist derjenige, den Sie gelöscht haben. Ist das beabsichtigt? –

Antwort

0

Ihre Löschfunktion nehmen Sie die Adresse des a und schreibt den gelöschten Wert hinein. Es wird also auf den Wert gesetzt, den Sie gelöscht haben.

Sie könnten nur *value = queue[*front]; entfernen und

printf("\n%d left counter 1",*value); zu

printf("\n%d left counter 1",queue[*front]);

und auch den ganzen Parameter entfernen, und dann denken, wechsle ich es tut, was Sie es tun wollen.

0

Ihre delete() Funktion ein als Pass durch Verweis übergeben, ist, warum Sie nicht bekommen, was Sie wollen

delete(queue,&front,rear,&a); 

Für Ihr Design sollten Sie

nach Wert ein als Pass passieren
delete(queue,&front,rear,a); 
void delete(int queue[], int *front, int rear, int value) 
+0

omg! Vielen Dank @ Sumit Gemeni und alle !!! Ich hab es geschafft!. – diniebee

+0

gibt es keine Notwendigkeit, Wert überhaupt zu übergeben, weil es nie verwendet wird –

+0

@KamiKaze ja können wir auch ohne es tun. Aber ich möchte zeigen, was er falsch gemacht hat. –

Verwandte Themen