腹立つ、fputcをやった時点で、ストップ! – プログラミング – Home

腹立つ、fputcをやった時点で、スト...
 
通知
すべてクリア

[解決済] 腹立つ、fputcをやった時点で、ストップ!


しまだ
 しまだ
(@しまだ)
ゲスト
結合: 19年前
投稿: 16
Topic starter  

VC++6のユーザーです。

static FILE *fx;
int TraRec;

if (TraRec == 0)
if (fx = fopen(Formant.doc,rb) == NULL)
{
printf(Formant Frequency File's open error!!\n);
exit(4);
}

if (TraRec == 1)
if ((fx = fopen(Formant.doc,wb)) == NULL)
{
printf(Formant Frequency File's open error!!\n);
 exit(4);
}

今はTraRec = 0;
の方が走って、

int GuessedWord;
int L1;

if ((L1 = fgetc(fx)) == EOF)
{
   GuessedWord = 5;
   goto InvDec;
}

InvDec:;

ここで、
if ((L1 = fgetc(fx)) == EOF)
に来た時、
ブレークポイントの設定位置0x77f75a58のエラー
L1 = fgetc(fx);
にしても同じ。

混合モードで見ると
77F75A40 ret 10h
77F75A43 cmp dword ptr [ebp-1Ch],0
77F75A47 je 77F75A51
77F75A49 push dword ptr [ebp-1Ch]
77F75A4C call 77F60A4A
77F75A51 ret
77F75A52 ret 4
77F75A55 int 3
77F75A56 int 3
77F75A57 int 3
77F75A58 int 3  ←
77F75A59 ret
77F75A5A mov edi,edi
77F75A5C int 3
77F75A5D ret
77F75A5E mov edi,edi
77F75A60 mov eax,dword ptr [esp+4]
77F75A64 int 3

どうすれば?


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> if ((L1 = fgetc(fx)) == EOF)
> {
>    GuessedWord = 5;
>    goto InvDec;
> }
>
> InvDec:;
ここのgoto文て意味あるのでしょうか?
この処理は何度も行われるのでしょうか?

混合モードになる前に適当な位置にブレイクポイントを設定して、
ある程度、ステップ実行すべきです。

> 腹立つ、fputcをやった時点で、ストップ!
このようなタイトルはつけないほうが良いです。
見ただけで不快感を与えます。今後気をつけてください。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

feof関数でチェックすればいいのかも。
http://www9.plala.or.jp/sgwr-t/lib/feof.html


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

> このようなタイトルはつけないほうが良いです。
> 見ただけで不快感を与えます。今後気をつけてください。

同意。はなから質問を読む気も起きないです.....。


返信引用
r
 r
(@r)
ゲスト
結合: 22年前
投稿: 48
 

> if (fx = fopen(Formant.doc,rb) == NULL)
括弧が足りないから、
fx にはファイルポインタぢゃなく 0 か 1 が入っちゃうさぁ~。


返信引用
r
 r
(@r)
ゲスト
結合: 22年前
投稿: 48
 

あと、この停止のしかたを見るとスタックが破壊されているっぽい気がする。
提示コード以外のところでおぞましい呪いがかかっている予感。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

>> if (fx = fopen(Formant.doc,rb) == NULL)
> 括弧が足りないから、
> fx にはファイルポインタぢゃなく 0 か 1 が入っちゃうさぁ~。

あらホント。その後fgetc(1)しちゃったらマシンから煙が上がっても文句言えないわ (^^

fx = fopen(...);
if ( fx == NULL ) { ... }

ってやっとけば何の問題もなかったのに。

# つか、 if (fx = fopen(Formant.doc,rb) == NULL) でwarning出たんじゃないのか?


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

>見ただけで不快感を与えます。
確かにいい心地はしない。
が、この程度でイチイチ反応してたら、日常生活に支障をきたすと思う。

>はなから質問を読む気も起きないです.....。
あなたも同類


返信引用
しまだ
 しまだ
(@しまだ)
ゲスト
結合: 19年前
投稿: 16
Topic starter  

確かに皆さんのおっしゃるとおりでした。
if ((fx = fopen(Formant.doc,rb)) == NULL)
としたら、なおりました。

私に不適切な発言がありましたことと、
あわせて、謝罪いたします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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