読み込んだchar型の文字について

[戻る]
コスモス 2002/06/04(火) 11:45:53
何回も申し訳ありません...。
ファイルの読み込みは解決したのですが、読み込んだ文字を配列に格納しようとすると
1番最初の文字だけおかしくなってしまいます。
読み込んでいる文字は以下のとおりです。

パターン[A]
パターン[B]
・
・
・
パターン[L]
パターン[M]

このファイルの以下のコードで読み込み配列に格納しているのですが、
どうしても「パターン[A]」の部分が「pターン[A]」となって配列に入ってしまいます。
冒頭以外はきちんと「パターン〜」と格納されているので、
原因がさっぱり分からずに困っております。

1日に何度も申し訳ありませんが、どうかアドバイスをお願いいたします。

void Yomikomi(void)
{
    FILE *fp;
    int i,j;
    char c;

    /*c_systpndataファイルを開く*/
    fp=fopen(SYSPTN_FILE,"r");
    
    /*c_systpndataファイル読み込み*/
    while((c = fgetc(fp)) != EOF)
    {
        for (j=0;j<13;j++){
            for (i=0;((c=fgetc(fp))!='\n');i++){
                mPtnData[j][i] = c;
            }
        }    
    }

}

Bun 2002/06/04(火) 11:59:00
>while((c = fgetc(fp)) != EOF)

ここで1キャラクタ分読み込んでしまっているからではないでしょうか。    
その結果1キャラクタ分ずれてしまう。

どうすればよいかは考えてみてください。(^^;

a 2002/06/04(火) 12:16:13
char c;
じゃなくって
int c;

a 2002/06/04(火) 12:16:47
↑のやつは直接は関係ないですけどね

beginner 2002/06/04(火) 12:55:16
あまり関係ありませんが、fgetsではいけないのでしょうか?
個人的にはfgetcは使わずに(よく知らないので正確には使えず?)
fgetsを使ってます。

コスモス 2002/06/04(火) 13:19:21
Bun様、a様、beginner様、たくさんのアドバイスありがとうございました。
考えた結果、以下のように訂正するときちんと文字が配列に格納されました。
まだまだC言語が分かっていないようです...。

Bun様、仰る通り最初に1キャラクタ分読み込んでしまっているので「pターンA」
などとおかしな文字で配列に格納されてしまっていました。
下記のように変更いたしました。

a様、fgetcの戻り値はint型でした。
文字が入るからchar型かと思いよく本を読みもせずに変数を宣言しておりました。
お恥ずかしい限りです...。

beginner様からのアドバイスであるfgetsも活用してみようとおもいます。
こちらの方が今回の場合は適しているように思います。

皆様からの暖かいアドバイスのおかげで、実現いたしました。
本当にありがとうございました!!

void KeitouOpen(void)
{
    FILE *fpk;
    int i,j;
    int iPtarn;

    /*c_systpndataファイルを開く*/
    fpk=fopen(SYSPTN_FILE,"r");
    
    /*c_systpndataファイル読み込み*/
    do{
        /*配列に格納*/
        for (j=0;j<12;j++){
            for (i=0;((iPtarn=fgetc(fpk))!='\n');i++){
                mPtnData[j][i] = iPtarn;
            }
        }    
    }while((iPtarn = fgetc(fpk)) != EOF);
}

コスモス 2002/06/04(火) 13:19:46
[[解決]]
解決いたしました。

a 2002/06/04(火) 21:08:18
[[解決]]
解決してよかったですね(^^

>a様、fgetcの戻り値はint型でした。
文字が入るからchar型かと思いよく本を読みもせずに変数を宣言しておりました。
お恥ずかしい限りです...。

これって勘違いしやすうですからね。
#int なのに c ですか?ってね
#私も昔はそうでした(^^;

古いスレッドには追加発言できません。