掲示板利用宣言

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

 私は

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

掲示板2

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

No.25079

ファイル操作の質問
投稿者---susumu(2006/01/06 17:21:20)


線形リストで、ファイルからデータを読み込んで、データの追加、削除、検索、表示などができるようにしたいのですが、追加、削除などの部分は、出来ているのですが、ファイルからデータを読み込むところがうまくいきません。
読み込むデータは、データの番号と名前なのですが、出来れば、

1 taraou
2 jirou
3 saburou
4 sirou
5 gorou
.
.
.
というデータを読み込んで、番号と名前を別々に格納して操作を行えるようにしたいのですが、どうしたらいいのでしょうか?
構造体は、

typedef struct {
int no; /* 番号 */
char name[10]; /* 氏名 */
} Data;

/*--- ノード ---*/
typedef struct __node {
Data data; /* データ */
struct __node *next; /* 後続ノードへのポインタ */
} Node;

/*--- 線形リスト ---*/
typedef struct {
Node *head; /* 先頭ノードへのポインタ */
Node *crnt; /* 着目ノードへのポインタ */
} List;
です。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ファイル操作の質問 25083 επιστημη 2006/01/06 22:06:52


No.25083

Re:ファイル操作の質問
投稿者---επιστημη(2006/01/06 22:06:52)


> ファイルからデータを読み込むところがうまくいきません。

なにがどううまくいかないかを説明してください。
どんなコードを書いたら、どうなったのですか?



この投稿にコメントする

削除パスワード

No.25088

Re:ファイル操作の質問
投稿者---susumu(2006/01/07 00:17:20)


>なにがどううまくいかないかを説明してください。
すいません。説明不足でした。

>どんなコードを書いたら、どうなったのですか?
FILE *fin, *fout, *fp;
    char infile[40], outfile[40];
    long int c,d; 
    int n;
    char str[5];
    long int pos;
    long int i;

    Menu  menu;
    List  list;

    
    InitList(&list);    
    
    printf( "入力ファイル名 = " );
    gets( infile );
    printf( "出力ファイル名 = " );
    gets( outfile );
    if( ( fin=fopen( infile, "r" ) ) == NULL ) {
        printf( "入力ファイルがオープンできません\n" );
        exit( 1 );
    }
    for (i = REC_NUM - 1; i >= 0; i--) {
        fseek (fp, i * REC_SIZE, SEEK_SET);
        pos = ftell(fp);
        fscanf(fp, "%3d%4s", &n, str);
        printf("pos = %2ld no = %3d %4s\n", pos, n, str);
    }




このままだと、
1itirou 2jirou 3saburou4sirou 5gokuu という風に書いたテキストからは読み込めるのですが、最初に書いたような形式だとうまくいきません。それと、どうやって、番号と名前に分けるのかが分かりません。どうしたらいいのでしょうか。






この投稿にコメントする

削除パスワード

No.25090

Re:ファイル操作の質問
投稿者---まきじ(2006/01/07 00:35:01)


>fseek (fp, i * REC_SIZE, SEEK_SET);

テキストストリームの場合第二引数は 0 か ftell() の戻り値でなければならない。
ftell() の戻り値の時は第三引数は SEEK_SET でなければならない。

>番号と名前に分けるのかが分かりません。
>fscanf(fp, "%3d%4s", &n, str);

fscanf(fp,"%d%s", &n, str); で良いのでは?


この投稿にコメントする

削除パスワード

No.25115

Re:ファイル操作の質問
投稿者---susumu(2006/01/07 22:53:26)


>fscanf(fp,"%d%s", &n, str); で良いのでは?

例えば、
1 iti 123
2 nii 124
3 san 356
4 yon 345
5 gou 346
6 rok 567
7 sit 890
8 hat 789
9 kyu 895

というデータの場合、実行結果が、

pos = 80 no = 7 ceil 890
pos = 70 no = 7 ceil 890
pos = 60 no = 346 6 890
pos = 50 no = 5 atim 346
pos = 40 no = 4 atof 345
pos = 30 no = 4 atof 345
pos = 20 no = 24 3 345
pos = 10 no = 2 asin 124
pos = 0 no = 1 acos 123

というようになってうまくいかないのですが、どこが悪いのでしょうか?
ファイル読み込みのところだけのソースは、
#include <stdio.h>
#include <stdlib.h>
#include <string.h>    

void main(void);

#define REC_SIZE 10      /* レコードの長さ */
#define REC_NUM 9        /* レコードの数 */

void main(void)
{
    FILE *fp;
    int n,sin;
    char str[5];
    long int pos;
    long int i;

      /* ファイルを開くのに失敗したら */
      /* プログラムを終了して、シェルに戻る */
    if ((fp = fopen("Func.txt", "r")) == NULL) {
        fprintf(stderr, "Can't Open File\n");
        exit(2);
    }

      /* 後ろのレコードから表示 */
    for (i = REC_NUM - 1; i >= 0; i--) {
        fseek (fp, i * REC_SIZE, SEEK_SET);
        pos = ftell(fp);
        fscanf(fp, "%d%4s%4d", &n, str,&sin);
        printf("pos = %2ld no = %d %4s %4d\n", pos, n, str,sin);
    }
            
    fclose(fp);        /* ファイルを閉じる */
}





この投稿にコメントする

削除パスワード

No.25116

Re:ファイル操作の質問
投稿者---まきじ(2006/01/07 23:40:45)


>#define REC_SIZE 10

改行文字の分考慮されていない。

というか、テキストストリームに対して
fseek (fp, i * REC_SIZE, SEEK_SET);
はしてはいけません。(No.25090 の投稿を参照)


この投稿にコメントする

削除パスワード

No.25117

Re:ファイル操作の質問
投稿者---susumu(2006/01/08 00:38:22)


>というか、テキストストリームに対して
>fseek (fp, i * REC_SIZE, SEEK_SET);
>はしてはいけません。(No.25090 の投稿を参照)
 
すいません。よく分からないのですが、具体的にはどうしたらいいのでしょうか?
教えていただけると助かります。


この投稿にコメントする

削除パスワード

No.25119

Re:ファイル操作の質問
投稿者---まきじ(2006/01/08 01:02:22)


>具体的にはどうしたらいいのでしょうか?

ファイルの後ろから出力したいなら、ファイルの先頭から配列に
読み込んで配列の後ろから出力したら如何?
こちらの方が確実かと。


この投稿にコメントする

削除パスワード

No.25132

Re:ファイル操作の質問
投稿者---susumu(2006/01/08 20:58:18)


とりあえず作ってみたのですが、入力ファイル名と出力ファイル名を入れたところでエラーになって。強制的に終了されてしまうのですが、どこ悪いのでしょうか?
ソースは、

/*--- メイン ---*/
int main(void)
{
    
    FILE *fin, *fout,*fp;
    char infile[40], outfile[40];
    long int c,d,pos,i;
    int n,sin;
    char str[5];
    

    Menu  menu;
    List  list;
    Data x;
    
    InitList(&list);    
    
    printf( "入力ファイル名 = " );
    gets( infile );
    printf( "出力ファイル名 = " );
    gets( outfile );
    if( ( fin=fopen( infile, "r" ) ) == NULL ) {
        printf( "入力ファイルがオープンできません\n" );
        exit( 1 );
    }
 for (i = REC_NUM - 1; i >= 0; i--) {
           pos = ftell(fp);
        fseek (fp, pos, SEEK_SET);
     
        fscanf(fp, "%d%4s%4d", &x.no, x.name,&x.sincyou);
        printf("pos = %2ld no = %d %4s %4d\n", pos, x.no, x.name,x.sincyou);
    }
            
                        /* 線形リストの初期化 */

    do {
   

        switch (menu = SelectMenu()) {
         case InsFront  :   x = Read("先頭に挿入", NO | NAME);
                            InsertFront(&list, x);                  break;

         case InsRear   :   x = Read("末尾に挿入", NO | NAME);
                            InsertRear(&list, x);                   break;

         case RmvFront  :   RemoveFront(&list);                     break;

         case RmvRear   :   RemoveRear(&list);                      break;

         case PrintCrnt :   PrintCrntNode(&list);                   break;

         case RmvCrnt   :   RemoveCrnt(&list);                      break;

         case SrchNo    :   x = Read("探索", NO);
                            if (SearchNode(&list, x, NoEqual) != NULL)
                                PrintCrntNode(&list);               break;

         case SrchName  :   x = Read("探索", NAME);
                            if (SearchNode(&list, x, NameEqual) != NULL)
                                PrintCrntNode(&list);               break;

         case PrintAll  :   PrintList(&list);                       break;

         case Clear     :   ClearList(&list);                       break;

         case Prg       :   Purge(&list);                           break;
        }
    } while (menu != Term);
    
if( ( fout=fopen( outfile, "w" ) ) == NULL ) {
        printf( "出力ファイルがオープンできません\n" );
        exit( 1 );
    }
    while( ( c=getc( fin ) ) != EOF ) {
        putc( c, fout );
    }
    fclose( fin );
    fclose( fout );
    return 0;

    TermList(&list);                            /* 線形リストの後始末 */

    return (0);

です。


この投稿にコメントする

削除パスワード

No.25133

Re:ファイル操作の質問
投稿者---気分屋(2006/01/08 21:27:05)


fseekとfscanfで使用しているfpが原因ではないでしょうか?
fpをオープンしているところがどこにもないし。
あまりプログラム見ていないけど、ここってfpじゃなくてfinなのでは?


この投稿にコメントする

削除パスワード

No.25137

Re:ファイル操作の質問
投稿者---susumu(2006/01/08 22:05:00)


>あまりプログラム見ていないけど、ここってfpじゃなくてfinなのでは?
とりあえず。ファイルからの読み込みはできるようになりました。
ありがとうございました。

けれど、読み込んだデータが格納されてなく、データの操作ができません。出力ファイルも出るのですが、何も表示されません。
どこが違っているのか分からないのですが、教えていただけないでしょうか?




この投稿にコメントする

削除パスワード

No.25140

Re:ファイル操作の質問
投稿者---気分屋(2006/01/08 23:00:06)


    printf("pos = %2ld no = %d %4s %4d\n", pos, x.no, x.name,x.sincyou);
これの出力結果はどのように出ていますか?

>出力ファイルも出るのですが、何も表示されません。
finのポインタが終端まで行ってしまっているためでしょう。
    fseek( fin, 0, SEEK_SET );
でファイルポインタの位置を最初に戻しましょう。




この投稿にコメントする

削除パスワード

No.25141

Re:ファイル操作の質問
投稿者---susumu(2006/01/08 23:21:53)


><pre> printf("pos = %2ld no = %d %4s %4d\n", pos, x.no, x.name,x.sincyou);
これの出力結果はどのように出ていますか?
入力ファイル名 = func.txt
出力ファイル名 = kekka.txt
pos = 0 no = 1 iti 123
pos = 9 no = 2 nii 124
pos = 20 no = 3 san 356
pos = 33 no = 4 yon 345
pos = 46 no = 5 gou 346
pos = 59 no = 6 rok 567
pos = 72 no = 7 sit 890
pos = 85 no = 8 hat 789
pos = 98 no = 9 kyu 895
という風に出ています。が追加、検索などを行おうとすると、データがありませんと表示されてしまいます。

> fseek( fin, 0, SEEK_SET );
でファイルポインタの位置を最初に戻しましょう。

ありがとうございました。出力はされるようになりました。




この投稿にコメントする

削除パスワード

No.25152

Re:ファイル操作の質問
投稿者---気分屋(2006/01/09 11:02:17)


>追加、検索などを行おうとすると、データがありませんと表示されてしまいます。
ファイルから読み込んだデータをxに入れているだけで
リストに代入していないからでしょう。



この投稿にコメントする

削除パスワード

No.25193

Re:ファイル操作の質問
投稿者---susumu(2006/01/10 11:49:17)


>ファイルから読み込んだデータをxに入れているだけで
>リストに代入していないからでしょう。

ありがとうございました。
データは格納できるようになりました。

ただ、リストで編集した後の、結果を保存したいのですが、どうしてもうまくいきません。
ソースは、

/*--- 会員データ ---*/
typedef struct {
    int   no;                   /* 番号 */
    char  name[10]; 
    int   tan;           /* 氏名 */
} Data;
    .
    .
    .
/*--- ノード ---*/
typedef struct __node {
    Data           data;        /* データ */
    struct __node  *next;       /* 後続ノードへのポインタ */
} Node;

/*--- 線形リスト ---*/
typedef struct  {
    Node  *head;                /* 先頭ノードへのポインタ */
    Node  *crnt;                /* 着目ノードへのポインタ */
} List;




int main(void)
{
    
    FILE *fin, *fout,*fp;
    char infile[40], outfile[40];
    long int c,d,pos,i;
    int n,sin;
    char str[5];
    

    Menu  menu;
    List  list;
    Node *ptr;
    Data x;
    
    InitList(&list);    
    
    printf( "入力ファイル名 = " );
    gets( infile );
    printf( "出力ファイル名 = " );
    gets( outfile );
    if( ( fin=fopen( infile, "r" ) ) == NULL ) {
        printf( "入力ファイルがオープンできません\n" );
        exit( 1 );
    }
 
     for (i = REC_NUM - 1; i >= 0; i--) {

           pos = ftell(fin);
           
        fscanf(fin, "%d%4s%4d", &x.no, x.name,&x.tan);
         InsertRear(&list,x);
        printf("pos = %2ld no = %d %4s %4d\n", pos, x.no, x.name,x.tan);
     }
            
                        /* 線形リストの初期化 */

    do {
   

        switch (menu = SelectMenu()) {
         case InsFront  :   x = Read("先頭に挿入", NO | NAME);
                            InsertFront(&list, x);                  break;

         case InsRear   :   x = Read("末尾に挿入", NO | NAME);
                            InsertRear(&list, x);                   break;

         case RmvFront  :   RemoveFront(&list);                     break;

         case RmvRear   :   RemoveRear(&list);                      break;

         case PrintCrnt :   PrintCrntNode(&list);                   break;

         case RmvCrnt   :   RemoveCrnt(&list);                      break;

         case SrchNo    :   x = Read("探索", NO);
                            if (SearchNode(&list, x, NoEqual) != NULL)
                                PrintCrntNode(&list);               break;

         case SrchName  :   x = Read("探索", NAME);
                            if (SearchNode(&list, x, NameEqual) != NULL)
                                PrintCrntNode(&list);               break;

         case PrintAll  :   PrintList(&list);                       break;

         case Clear     :   ClearList(&list);                       break;

         case Prg       :   Purge(&list);                           break;
        }
    } while (menu != Term);
    
        fseek( fin, 0, SEEK_SET );

if( ( fout=fopen( outfile, "w" ) ) == NULL ) {
        printf( "出力ファイルがオープンできません\n" );
        exit( 1 );
    }
 while (ptr != NULL) {
    while( ( c=getc( &ptr->data ) ) != EOF ) {
        putc( c, fout );
    }
}
    fclose( fin );
    fclose( fout );
    return 0;

    TermList(&list);                            /* 線形リストの後始末 */

    return (0);
}

で、
エラー E2451 sinnki.c 343: 未定義のシンボル level(関数 main )
エラー E2451 sinnki.c 343: 未定義のシンボル curp(関数 main )
警告 W8075 sinnki.c 343: 問題のあるポインタの変換(関数 main )
警告 W8066 sinnki.c 351: 実行されないコード(関数 main )
というエラーが出るのですが、どうしたらいいのでしょう?
特にエラーのところは意味がよくわからないのですが、どなたか教えていただけないでしょうか?



この投稿にコメントする

削除パスワード

No.25194

Re:ファイル操作の質問
投稿者---susumu(2006/01/10 12:00:20)


>エラー E2451 sinnki.c 343: 未定義のシンボル level(関数 main )
>エラー E2451 sinnki.c 343: 未定義のシンボル curp(関数 main )
>警告 W8075 sinnki.c 343: 問題のあるポインタの変換(関数 main )
>警告 W8066 sinnki.c 351: 実行されないコード(関数 main )
>というエラーが出るのですが、どうしたらいいのでしょう?

すいません。書き忘れていました。

最初のエラーの場所は
while( ( c=getc( &ptr->data ) ) != EOF ) {

最後の警告の場所は、
TermList(&list); /* 線形リストの後始末 */

の部分です。


この投稿にコメントする

削除パスワード

No.25196

Re:ファイル操作の質問
投稿者---wiz(2006/01/10 13:15:51)


>ただ、リストで編集した後の、結果を保存したいのですが、どうしてもうまくいきません。
保存するためのコードが書かれていません。
うまくいかないのは当然です。

ぱっと見ですが。。。

エラー E2451 sinnki.c 343: 未定義のシンボル level(関数 main )
エラー E2451 sinnki.c 343: 未定義のシンボル curp(関数 main )
提示されたコードではこのエラーは起こらないと思うのですが。。。
気のせい。。。?

警告 W8075 sinnki.c 343: 問題のあるポインタの変換(関数 main )
while( ( c=getc( &ptr->data ) ) != EOF ) {
何がやりたいのか良く分からない。。。
getcの関数仕様を確認して&ptr->dataが何を指すのかを
考えてみて下さい。

警告 W8066 sinnki.c 351: 実行されないコード(関数 main )
>fclose( fin );
>fclose( fout );
>return 0;
このreturn 0は確実に通ります。
ここでmain関数が終了するので以下のコードが実行されないと言われる。
>TermList(&list);/* 線形リストの後始末 */
>return (0);




この投稿にコメントする

削除パスワード

No.25202

Re:ファイル操作の質問
投稿者---susumu(2006/01/10 17:02:39)


>提示されたコードではこのエラーは起こらないと思うのですが。。。
このままコンパイルすると、エラーは起こってしまいます。

>ここでmain関数が終了するので以下のコードが実行されないと言われる。
>>TermList(&list);/* 線形リストの後始末 */
>>return (0);
>
ありがとうございました。
この部分は解決しました。




この投稿にコメントする

削除パスワード

No.25199

Re:ファイル操作の質問
投稿者---気分屋(2006/01/10 13:28:16)


多分こうやりたいんじゃないかなという勝手な憶測で書いてみました。

>while (ptr != NULL) {
>   while( ( c=getc( &ptr->data ) ) != EOF ) {
>      putc( c, fout );
>   }
>}

↓

ptr = list.crnt;
while (ptr != NULL) {
    fprintf( fp, "%d %s %d", ptr->data.no, ptr->data.name, ptr->data.tan );
    ptr = ptr->next;
}




この投稿にコメントする

削除パスワード

No.25203

Re:ファイル操作の質問
投稿者---気分屋(2006/01/10 17:13:17)


そういえばファイルポインタの変数名が違ったね

× fprintf( fp, "%d %s %d", ptr->data.no, ptr->data.name, ptr->data.tan );

○ fprintf( fout, "%d %s %d", ptr->data.no, ptr->data.name, ptr->data.tan );



この投稿にコメントする

削除パスワード

No.25205

Re:ファイル操作の質問
投稿者---susumu(2006/01/10 18:28:20)


>多分こうやりたいんじゃないかなという勝手な憶測で書いてみました。
大変参考になりました。
きちんとファイルにも出力されるようになりました。ありがとうございました。

それと、何度も申し訳ないのですが、
番号や名前で検索を行ったとき、番号で検索をしているのに、一緒に誕生日も入力を求められるのですが、どこが悪いのでしょうか?

(番号などで検索した場合、誕生日の入力は適当でもちゃんと番号で検索はされます。)

使う部分は、
/*--- データの番号が一致するか(探索用関数) ---*/
int NoEqual(Data x, Data y)
{
    return (x.no == y.no);
}

/*--- データの氏名が一致するか(探索用関数) ---*/
int NameEqual(Data x, Data y)
{
    return (strcmp(x.name, y.name) == 0);
}

int SincyouEqual(Data x, Data y)
{
    return(x.sincyou == y.sincyou);
}

/*--- 関数equalによってxと一致するノードを探索 ---*/
Node *SearchNode(List *list, Data x, int equal(Data x, Data y))
{
    Node  *ptr = list->head;

    while (ptr != NULL) {
        if (equal(ptr->data, x)) {      /* キー値が一致 */
            list->crnt = ptr;
            return (ptr);               /* 探索成功 */
        }
        ptr = ptr->next;                /* 後続ノードに着目 */
    }
    return (NULL);                      /* 探索失敗 */
}
/*--- データの入力 ---*/
Data Read(const char *message, int sw)
{
    Data  temp;

    printf("%sするデータを入力してください。\n", message);

    if (sw & NO)    { printf("番号:");   scanf("%d", &temp.no);  }
    if (sw & NAME)  { printf("名前:");   scanf("%s", temp.name); }
    if (sw & TAN)   { printf("誕生日");   scanf("%d", &temp.sincyou); }
    return (temp);
}


今までtanとしていた所は、sinncyouと変えました。


この投稿にコメントする

削除パスワード

No.25206

Re:ファイル操作の質問
投稿者---nop(2006/01/10 19:07:03)


>番号や名前で検索を行ったとき、番号で検索をしているのに、一緒に誕生日も入力を求められるのですが、どこが悪いのでしょうか?

まず、自分で「トレースして解析しよう!」
と思わない思考回路では無いでしょうか?

そもそも、現象から「誕生日の入力」を行う条件に誤りがあるのではないか?
位の予想はつきますよね?
そこから、デバッグを行えるかと思いますが、いかがでしょうか?


この投稿にコメントする

削除パスワード

No.25207

Re:ファイル操作の質問
投稿者---REE(2006/01/10 19:07:09)


>番号や名前で検索を行ったとき、番号で検索をしているのに、一緒に誕生日も入力を求められるのですが、どこが悪いのでしょうか?

NO,NAME,TANの値は? まあ、おそらく1,2,3でしょう
これでは、NOを指定しても、NO & TAN (1 & 3)が真になるため 「誕生日」も聞かれます。
連番として使うのならば、==で比較しましょう。
ビットマスクとして使う場合は、ビットパターンが重複しないものを選びましょう。

# 理解してもらうためあえて具体的対策は書きません。



この投稿にコメントする

削除パスワード

No.25204

Re:ファイル操作の質問
投稿者---shu(2006/01/10 18:00:15)


>エラー E2451 sinnki.c 343: 未定義のシンボル level(関数 main )
>エラー E2451 sinnki.c 343: 未定義のシンボル curp(関数 main )
>警告 W8075 sinnki.c 343: 問題のあるポインタの変換(関数 main )
>警告 W8066 sinnki.c 351: 実行されないコード(関数 main )
>というエラーが出るのですが、どうしたらいいのでしょう?

エラーを読む。

コンパイラについているヘルプで、(E2451、W8075という情報を使って)調べれば、
エラーや警告の意味がわかるのではないでしょうか?


この投稿にコメントする

削除パスワード

No.25143

Re:ファイル操作の質問
投稿者---まきじ(2006/01/08 23:58:57)


「ファイルの末尾から出力したい」から
>fseek (fp, i * REC_SIZE, SEEK_SET);
>pos = ftell(fp);
としてたと思ってたのですが
>pos = ftell(fp);
>fseek (fp, pos, SEEK_SET);
と修正されましたが、良いの?

ftell() で現在の位置を取得して、直ぐに fseek() で(同じ位置に)移動しても無意味ですね。


この投稿にコメントする

削除パスワード

No.25144

Re:ファイル操作の質問
投稿者---susumu(2006/01/09 00:27:39)


>「ファイルの末尾から出力したい」から
>>fseek (fp, i * REC_SIZE, SEEK_SET);
>>pos = ftell(fp);
>としてたと思ってたのですが
>>pos = ftell(fp);
>>fseek (fp, pos, SEEK_SET);
>と修正されましたが、良いの?

ファイルから読み込んだデータを最初から表示をして、データを操作できるようにしたいのですが、
fseek (fp(ポインタの位置から), pos(バイト動かす), SEEK_SET(ファイルの先頭から));
という風に考えているのですが、間違っているのでしょうか?

それと、読み込んだデータを、リストに格納して、操作をできるようにしたいのですが、格納するところがうまくいかずに困っています。
どこが悪いのかを教えていただけると助かります。



この投稿にコメントする

削除パスワード

No.25145

Re:ファイル操作の質問
投稿者---まきじ(2006/01/09 00:31:41)


>ファイルから読み込んだデータを最初から表示をして

なら fscanf() だけ良いですね。
fseek() しなくてもファイルポインタは移動します。


この投稿にコメントする

削除パスワード

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