読み込んだchar型の文字について – プログラミング – Home

読み込んだchar型の文字について
 
通知
すべてクリア

[解決済] 読み込んだchar型の文字について


コスモス
 コスモス
(@コスモス)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

何回も申し訳ありません...。
ファイルの読み込みは解決したのですが、読み込んだ文字を配列に格納しようとすると
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
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>while((c = fgetc(fp)) != EOF)

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

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


返信引用
a
 a
(@a)
ゲスト
結合: 23年前
投稿: 59
 

char c;
じゃなくって
int c;


返信引用
a
 a
(@a)
ゲスト
結合: 23年前
投稿: 59
 

↑のやつは直接は関係ないですけどね


返信引用
beginner
 beginner
(@beginner)
ゲスト
結合: 23年前
投稿: 63
 

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


返信引用
コスモス
 コスモス
(@コスモス)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

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);
}


返信引用
コスモス
 コスモス
(@コスモス)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

解決いたしました。


返信引用
a
 a
(@a)
ゲスト
結合: 23年前
投稿: 59
 

解決してよかったですね(^^

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました