2016-07-24 22 views
0

試圖用C編寫一個程序,它創建一個隊列並允許用戶添加值。隊列使用數組設置。不知何故,我的代碼不工作,我想知道是否有人可以幫我排除故障。用C語言編寫隊列,我的代碼出錯的地方

#include <stdio.h> 

#define CAP 10 

//define a struct for our queue 
typedef struct _que 
{ 
    int arr[CAP]; 
    int front; 
    int size; 
} 
que; 

void enqueue (que* ptr, int add); 

int main(void) 
{ 
    int i; 
    que q1; 
    q1.front = 0; 
    q1.size = 0; 
    char yn = 'n'; 
    //while loop for adding elements 
    do 
    { 
     printf("Enter the value you wish to add\n"); 
     scanf("%d",&i); 
     enqueue(&q1, i); 
     printf("Would you like to add any more elements?\n"); 
     scanf("%c",&yn); 
    } 
    while (yn == 'y' && q1.size <= CAP); 
    printf("The current element(s) in the queue are:"); 
    //TODO: print out elements in the queue 
    for(int start = 0; start <= q1.size; start++) 
    { 
     printf("%d",q1.arr[start]); 
    } 
    printf("\n"); 
} 

void enqueue(que* ptr, int add) 
{ 
    ptr->arr[((ptr->front)+(ptr->size))] = add; 
    ptr->size += 1; 
} 

程序正常執行到它打印的一部分「你想添加更多的元素」,那麼它只是跳出do-while循環中,並打印在隊列中的元素,這也因爲它吐出垃圾值,如217836276,可能表示存在內存問題

回答

0

您的情況start <= q1.size是錯誤的,它包含off-by-one error。它應該是start < q1.size

爲了避免讀取空白字符yn,一個空格應該%cscanf(" %c",&yn);之前加入到具有scanf()跳過空格字符。

另請注意,條件q1.size <= CAP對於防止緩衝區溢出也是錯誤的,它應該是q1.size < CAP

+0

解決了它,謝謝! –