前提・実現したいこと
c言語でキューの実装の課題なのですが、エラーが出てしまいます
発生している問題・エラーメッセージ
学校のテスト用のランダムな入力とチェックで出たエラーです。コンパイルは通ります。
残念!入力
push o
pop
push a
pop
push u
push y
push z
pop
push c
push k
pop
pop
pop
push v
pop
pop
push y
push w
pop
push r
push h
push z
pop
push w
push y
に対して、
[y, r, h, w, y]
oazkcyvuwz
と出力すべきところを、
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
Unknown command.
[]
と出力した
該当のソースコード
C
1#include<stdio.h> 2#include<stdlib.h> 3#include<string.h> 4 5#define MAX_BUF_SIZE 1024 6 7#define QUEUESIZE 128 8typedef char elementtype; 9 10typedef struct { 11 int front, rear; 12 elementtype elements[QUEUESIZE]; 13} queue; 14 15void initqueue(queue *q) 16{ 17q->front = q->rear = 0; 18} 19 20int queueempty(queue *q) 21{ 22 // ここを埋める。 23return q->front == q->rear; 24} 25 26void printqueue(queue *q) 27{ 28 // ここを埋める。 29 int i; 30 printf("["); 31 for(i = q->front; i < q->rear-1 ; i++){ 32 printf("%c, ",q->elements[i]);} 33 printf("%c",q->elements[q->rear-1]); 34 printf("]"); 35 printf(""); 36 printf("\n") 37} 38 39void putq(queue *q, elementtype x) 40{ 41 // ここを埋める。 42q->elements[q->rear] = x; 43 q->rear++; 44 if(q->rear >= QUEUESIZE){ 45 q->rear = 0; 46} 47 if(q->rear == q->front){ 48 printf("queue overflow"); 49 exit(1); 50 } 51} 52 53elementtype getq(queue *q) 54{ 55 // ここを埋める。 56elementtype x; 57 if(q->front == q->rear){ 58 printf("queue underflow"); 59 exit(1); 60 }else{ 61 x = q->elements[q->front]; 62 q->front++; 63 if(q->front >= QUEUESIZE){ 64 q->front = 0; 65 } 66 return x; 67 } 68} 69 70void test(void) 71{ 72 elementtype x; 73 queue q; 74 char buf[MAX_BUF_SIZE], str[MAX_BUF_SIZE]; 75 int n = 0; 76 77 initqueue(&q); 78 79 while(fgets(buf, MAX_BUF_SIZE, stdin) != NULL){ 80 if (strncmp(buf, "putq ", 5) == 0){ 81 // putq 82 x = buf[5]; // 6文字目が要素 83 putq(&q, x); 84 continue; 85 if (strncmp(buf, "getq", 4) == 0){ 86 // getq 87 x = getq(&q); 88 str[n] = x; 89 n++; 90 continue; 91 } 92 printf("Unknown command.\n"); 93 } 94 95 } 96 97 printqueue(&q); 98 99 for(int i = 0; i < n; i++){ 100 printf("%c", str[i]); 101 } 102 printf("\n"); 103} 104 105int main(void) 106{ 107 test(); 108 109 return 0; 110} 111
試したこと
試したことではないですが、テスト用の関数(test(void))の`while文の条件に引っかかってしまっているような気がします
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー