私はプログラミングにおいて非常に新しいです。配列(循環キュー)を使ってキューを実装するプログラムを作成したかったのです。私は、キュー機能から要素を削除する&を挿入するのは正しいと思いますが、表示機能には問題があります。キューがいっぱいになると、要素を挿入しようとすると関数ごとに「QUEUE FULL」と表示されず、要素の横にいくつかのガベージ値が表示されます。このCコードのバグはどこですか?
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define m 3 // maximum size of array
int Q[m];
int f=-1,r=-1,s; //f=front,r=rear,s=rear in another term for finding wheather is
queue full
int enQueue(int item){
s = (r+1)%(m+1);
if(f == s)
printf("\nQUEUE FULL");
else{
Q[s] = item;
r = s;
}
return 0;
}
int deQueue(){
int item;
if(f == r)
printf("\nQUEUE UNDERFLOW");
else{
f = (f+1)%(m+1);
item = Q[f];
Q[f] = NULL;
}
return 0;
}
void displayQueue(){
int i;
if(f == r)
printf(" \n The queue is empty\n");
else {
printf("\nQUEUE IS : \n");
for(i=f+1; i<=s; i++) {
printf("%d\t", Q[i]);
}
printf("\n\n********************************************");
}
}
int main(){
int item,i,j;
while (1){
printf("\n\nENTER ITEM TO INSERT : ");
scanf("%d", &item);
enQueue(item);
displayQueue();
}
_getch();
return 0;
}
デバッガを使用しましたか? – MikeCAT
番号を分けるのに 'm 'の代わりに' m + 1'が使われるのはなぜですか?アレイの範囲外にアクセスする危険性があります! – MikeCAT
私はVisual Studio 12 @ MikeCAT – Fsalad