掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.30435

1文字表示になっているのを文字列表示にするのには
投稿者---C Newbie(2007/07/03 17:29:06)


すみません。下記は1文字ずつキューに保管するプログラムになっていますが、それを1文字から文字列に変更するのにはどうすればよろしいでしょうか?(文字列をキューに保管する方法)
私なりに色々本やインターネットで調べたり試したみたのですが、エラーが発生してどうしてもわからないので、教えていただけると大変ありがたいです。
ちなみに、宣言がChar型になっているからなんでしょうか?試しに配列に変更してみたり、Const charにしてみたのですが、やはり駄目でした。取り込んだ時のDATA変数はちゃんと文字列になっているので、その後の処理で1文字に変更されているのでしょうか?

OS:Windows
コンパイラ:Microsoft Visual C++

お願いします。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_SIZE 8
#define OK       0     //返却値コード
#define NG       -1    //返却値コード
char queue[MAX_SIZE];  //キュー
char *head;      //先端ポインター
char *tail;            //最後ポインター
char *queue_min;       //配列の最初
char *queue_max;       //配列の最後

void q_ini();          //キューの初期化
int put_q(char);      //データの格納
int get_q(char *);    //データの取り出し 

main()
{
 char data[256];
 int  i;

 q_ini();

printf("input mode:");
gets(data);
while(strcmp(data,"exit")!=0){
if(strcmp(data,"get")!=0)
{
//printf("%s\n", data);
if(put_q(data[0])==NG)
{
printf("area full\n");
}
}
else if(strcmp(data,"get")==0)
{
if(get_q(&data[0])==NG)
{
printf("queue empty\n");
}
}
else{
printf("mode error\n");
}
printf("input mode:");
gets(data);
}
}


void q_ini()
{
head = queue;
tail = head;
queue_min = queue;
queue_max = queue+MAX_SIZE-1;
}

int put_q(char data)
{
int ret_code;
if((head == queue_min && tail == queue_max) || tail == head-1)
ret_code = NG;
else {
*tail = data;
tail++;
if( tail > queue_max ) tail = queue_min;
ret_code = OK;
}
return ret_code;
}

int get_q(char *pd)
{
int ret_code;
if(tail == head) ret_code = NG;
else{
*pd=*head;
head++;
if(head > queue_max ) head = queue_min;
ret_code = OK;
}
return ret_code;
}





この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:1文字表示になっているのを文字列表示にするのには 30436 acid 2007/07/03 18:01:11


No.30436

Re:1文字表示になっているのを文字列表示にするのには
投稿者---acid(2007/07/03 18:01:11)


char型の二次元配列を使う必要があります。

    char queue[MAX_QUEUE_SIZE][MAX_DATA_SIZE];  //キュー

のように、一要素の長さがMAX_DATA_SIZEの、要素数MAX_QUEUE_SIZE個のキューを宣言します。

現在put_q()内の

>      *tail = data;

の部分でデータ一文字をキューに入れてますが、これをstrcpy()を使って文字列をコピーするように変更します。
そしてtailを配列一要素の先頭を指すポインタにします。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧