キゅー
ファイルから読み込んだデータ文字列をキゅーにエンキゅーしたりできゆーしたりするプログラムを作っています。
もう少しで完成なんですがちょっとエラーでます。
次のソースのうちどこを変えたらいいか教えてください
プラグラム
#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))の()の中が適切じゃないかも。宣言構文のエラーと出るので。
お礼
回答ありがとうございます。 リンクありがとうございます。 標記荷重だと言う事は分かりましたが、なぜむ・ら・さ・きとなっているのですかね?。