何回も申し訳ありません...。
ファイルの読み込みは解決したのですが、読み込んだ文字を配列に格納しようとすると
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;
}
}
}
}
>while((c = fgetc(fp)) != EOF)
ここで1キャラクタ分読み込んでしまっているからではないでしょうか。
その結果1キャラクタ分ずれてしまう。
どうすればよいかは考えてみてください。(^^;
char c;
じゃなくって
int c;
↑のやつは直接は関係ないですけどね
あまり関係ありませんが、fgetsではいけないのでしょうか?
個人的にはfgetcは使わずに(よく知らないので正確には使えず?)
fgetsを使ってます。
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);
}
解決いたしました。
解決してよかったですね(^^
>a様、fgetcの戻り値はint型でした。
文字が入るからchar型かと思いよく本を読みもせずに変数を宣言しておりました。
お恥ずかしい限りです...。
これって勘違いしやすうですからね。
#int なのに c ですか?ってね
#私も昔はそうでした(^^;