• ベストアンサー

キゅー

ファイルから読み込んだデータ文字列をキゅーにエンキゅーしたりできゆーしたりするプログラムを作っています。 もう少しで完成なんですがちょっとエラーでます。 次のソースのうちどこを変えたらいいか教えてください プラグラム #include <stdio.h> #include <stdlib.h> #include <string.h> /*--- キューを実現する構造体 ---*/ typedef struct { int max; /* キューのサイズ */ int num; /* 現在の要素数 */ int front; /* 先頭要素カーソル */ int rear; /* 末尾要素カーソル */ char (*que)[100]; /* キュー(の先頭要素へのポインタ) */ } Queue; /*--- キューの初期化 ---*/ int QueueAlloc(Queue *q, int max) { q->num = q->front = q->rear = 0; if ((q->que = calloc(max*20, sizeof(char))) == NULL) { q->max = 0; /* 配列の確保に失敗 */ return (-1); } q->max = max; return (0); } //--- キューの後始末 --- void QueueFree(Queue *q) { if (q->que != NULL) { free(q->que); // 配列を解放 q->max = q->num = q->front = q->rear = 0; } } /*--- キューにデータをエンキュー ---*/ int QueueEnque(Queue *q, char *buffer)) { if (q->num >= q->max) return (-1); /* キューは満杯 */ else { q->num++; strcpy(q->que[q->rear++] ,&buffer[0]); if (q->rear == q->max) q->rear = 0; return (0); } } /*--- キューからデータをデキュー ---*/ int QueueDeque(Queue *q, char *buffer)) { if (q->num <= 0) /* キューは空 */ return (-1); else { q->num--; strcpy(&buffer[0],que[q->front++); if (q->front == q->max) q->front = 0; return (0); } } /*--- キューの大きさ ---*/ int QueueSize(const Queue *q) { return (q->max); } /*--- キューに蓄えられているデータ数 ---*/ int QueueNo(const Queue *q) { return (q->num); } /*--- キューは空か ---*/ int QueueIsEmpty(const Queue *q) { return (q->num <= 0); } /*--- キューは満杯か ---*/ int QueueIsFull(const Queue *q) { return (q->num >= q->max); } int main(void) { int i=0,j=0,ret; char buffer[20]; FILE *fpin; Queue que; double ab,ac; char aa[10]; fpin=fopen("input2.txt","r"); //テキストファイルを読み取りモードで開く if (QueueAlloc(&que, 100) == -1) { puts("キューの確保に失敗しました。"); return (1); } while (1) { int m, x; printf("現在のデータ数:%d/%d\n", QueueNo(&que), QueueSize(&que)); printf("(1) エンキュー (2) デキュー (0) 終了:"); scanf("%d", &m); if (m == 0) break; switch (m) { case 1: if(fgets(&buffer[0],sizeof(buffer),fpin) ==NULL) { puts("もう読み込むデータがありません"); goto END; } if(j>=NUMBER)//読み込む人数がNUMBERを超えてる時の処理 { puts("人数が100人を超えています"); goto END; } j++; printf("データ:%s",&buffer[0]); if (QueueEnque(&que, buffer) == -1) puts("データのエンキューに失敗しました。"); break; case 2: if (QueueDeque(&que, buffer) == -1) puts("デキューできません。"); else { printf("デキューしたデータは%d。\n", &buffer[0]); break; } } } END: QueueFree(&que); fclose(fpin); return (0); } 多分int QueueEnque(Queue *q, char *buffer))と int QueueDeque(Queue *q, char *buffer))の()の中が適切じゃないかも。宣言構文のエラーと出るので。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

39:int QueueEnque(Queue *q, char *buffer)) ) が1個多い 53:int QueueDeque(Queue *q, char *buffer)) ) が1個多い 59:strcpy(&buffer[0],que[q->front++); queはq->queの間違い? ] が足りない 123:if(j>=NUMBER)//読み込む人数がNUMBERを超えてる時の処理 NUMBER が未定義 コンパイルエラーのみの修正なので内容が正しいかは見ていません

hiro3932
質問者

お礼

回答ありがとうございます。 すみません。 初歩的なミスをしてたみたいです。 解決しました。 ありがとうございました。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

> 宣言構文のエラー コンパイル・エラーですか? ソースの何行目で何というエラーが出るか 「正確に」教えてください。

関連するQ&A

専門家に質問してみよう