2016-11-23 17 views
0

我的想法是讓這個程序首先將數字(從1001開始)排列到10循環,但同時每兩次循環。我希望它刪除第一個數字插入。然後它繼續插入最後一個數字插入後的數字。例如。 (0)插入1001,(1)插入1002,(2)刪除1001,(3)插入1003,(4)插入1004,(5)刪除1002.這是我想象的和慾望輸出。但現在。當它刪除它重置爲初始數字。爲什麼數組不能繼續插入最後一個數字?

#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

你能傳遞一個爲通什麼請重寫你的解釋,這不是很具描述性,我很難理解你想說什麼。 –

+0

在插入函數中也包含front,因爲最初的第一個元素應該設置爲0. – sas

+0

我沒有看到你的程序試圖完成什麼。你只需要向前和向後計數,所以在最多10次調用「insert」之後,你將無法添加另一個,因爲在刪除中你從不減少後部,你只需向前計數......同樣,如果你刪除了某個東西再次設置爲第一個值。所以下一個增值將是你刪除的那個。這是打算? –

回答

0

您的刪除功能取a的地址,並將刪除的值寫入其中。所以它會設置爲您刪除的值。

你可以只取出 *value = queue[*front]; 和改變

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

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

,並刪除整個參數,那麼我認爲這是你想要它做的事情。

0

您刪除()函數傳遞一個如通過引用傳遞,這就是爲什麼你沒有得到你想要

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

對於你的設計,你應該通過價值

delete(queue,&front,rear,a); 
void delete(int queue[], int *front, int rear, int value) 
+0

omg!非常感謝@Sumit Gemeni和所有人!我知道了!。 – diniebee

+0

沒有必要傳遞價值,因爲它永遠不會被使用 –

+0

@KamiKaze是的,我們也可以在沒有它的情況下做。但我想表明他在做什麼錯。 –

相關問題