
No.4ベストアンサー
- 回答日時:
正直言、現在開示されている情報だけでは
「開示されていない箇所でなにかおかしいところがある」
「開示した情報が実際のものと違いすぎて参考にならない」
「確かめかたが間違っていて実際の状況と違う」
「fp_inの入力ファイルに改行がない(少なくとも、CRLFまたはLFは使われていない)」
のどれかだ、としか言いようがありません。
既出ですが、
「エラーメッセージを正確に書く(できればコピペする)」
「その警告箇所周辺のソースコードをコピペする」
とでもしてもらわないと、アドバイスのしようがありません
改行コードが特殊なものでなければ、判定は c=='\n' で問題無いはずです。
例えば、下のソースを test.c というファイル名で保存してコンパイル→実行したら、どうなります?
#include <stdio.h>
int main() {
int c;
FILE *fp_in = fopen("test.c","r" ) ;
if ( fp_in == NULL ) {
return 1;
}
for(;;){
c = getc(fp_in) ;
if ( c == EOF ) {
printf("\nEnd of file\n");
break ;
}
if ( c == '\n' ) {
printf("\nEnd of line\n");
break ;
}
putchar(c) ;
}
return 0 ;
}
#include <stdio.h>
End of line
正しく判定が行われてますね。
ではc == '\n'という判定の仕方は正しいのですね。
ということは他の箇所に誤りがある様です。
回答して下さった方々どうもありがとうございます。
そして色々とご迷惑お掛けしてすみませんでした。
自分で再度ソースを見直してみます。
No.3
- 回答日時:
警告は出ても問題ないケースもあるけれど、やはり出ないようにプログラムを書くのが上達への一歩。
発生箇所はちゃんと近くに書いてあります。(括弧の不対応など、発生箇所と原因が離れている場合もありますが)
エラーメッセージの内容と、ifが成立しないということから推測すると
c == getc(fp_in);
になっている可能性の方が高そうですね > #2さん
手許のVisualStudio2005で実験コード書いてやってみたら、似た警告が出ました。
さらに、その後に「==は=ではないですか?」と修正のヒントまで表示されました。
この回答への補足
コンパイルはborlandを使用しています。
あとc = getc(fp_in);は代入です。
今のところc == '\n'という記述で改行は判定できないのでは?というのが考えです。
No.2
- 回答日時:
えぇと.... 質問文がハチャメチャ....
まず
if(c == '\n');
と
if(c == '\n')
break;
は全然意味が違うわけだから, なぜわざわざ後者を見せないで前者の形で質問したのかが分からん.
あと, 「コマンドプロンプトに『コードは効果を持たない』と言われ」も意味不明. たしかにコマンドプロンプトで出てくるメッセージは謎なこともあるけど, それにしてもこんな謎のメッセージは出ない.
とりあえず
・どういう操作をしてどんなメッセージが出たのか
・そのメッセージはプログラムのどの部分に対して出ているのか
を正確に出してください. あと, 当該部分で使っている変数があればその宣言も念のため正確に書いてください.
今出ている情報だけだとあまりにも不正確なので「質問文では == になってるけど, 実はプログラムでは = と書いている」という疑いを捨てきれないのよ....
この回答への補足
if文が真にならない原因が知りたかったので、
c =(代入演算子です) getc(fp_in);
if(c ==(関係演算子です) '\n')
真の場合(略);
と省略しました。分かり難くて申し訳ないです。
現状では、
・if文が偽になっていることは確認済み
・警告はc == '\n'に対して出ている
(getcが改行を読み込んだ場合 c == '\n'では改行判定にならない、
又は記述が正しくない?)
要するにgetcが改行を読み込んだ場合、
・改行を判定するにはどう記述すればいいのか?
を聞きたいのです。
No.1
- 回答日時:
>if(c == '\n');
上記のコードのとおりであるならば、cの値がいくつであろうと何も行いません。
正確には、
(1)cの値が'\n'以外の場合:括弧以降の文の終わりの次まで進む
(2)cの値が'\n'場合:括弧以降の文を処理するも、その文が
;
のみなので何もせず次の文に進む
という処理を行います。
あるいは、コンパイラが生成した実行ファイルでは最適化によってこの処理自体が消えている可能性があります。
この回答への補足
いえ実際にはifが真である場合にはbreakでループを抜け出すように記述しています。
for(;;){
c = getc(fp_in);
if(c == '\n')
break;
…(略)
}
それでどうしても改行でループが抜け出せないので、
記述の仕方が違うのかなということです。
説明不足ですみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- Visual Basic(VBA) エクセル VBA 難しいです 1 2023/02/21 15:39
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- JavaScript HTMLでJavaScriptを使用してプログラムを作ります。 入力されたパスワードを取得して、パス 2 2022/10/18 01:05
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- その他(プログラミング・Web制作) atcoder python コードへの助言 2 2022/08/12 15:31
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/01/06 08:39
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語で平均をだす
-
c言語 プログラム
-
直角三角形を表示するプログラム
-
入力した数値を0~3乗するプロ...
-
ガウスの消去法のプログラムが...
-
c言語のwhile文を使った計算で...
-
データ管理プログラムを作って...
-
C言語。どうしてコンパイルでき...
-
分散を求めるプログラム
-
VHDLで、case文とwhen文のどち...
-
C言語 重複しない4ケタの乱数...
-
for文~break
-
scanfが実行されません
-
平均身長のプログラミング
-
C言語のwhile文を使った素数判...
-
素因数分解のプログラムを作成...
-
for文について
-
C言語初心者です。次の問題で質...
-
素数プログラムの解読、
-
C言語 マスターマインドゲーム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
配列を関数に渡す方法
-
getcの改行判定
-
C言語の二分法のプログラムにつ...
-
C言語 マスターマインドゲーム...
-
全角文字の判定
-
計算結果がlong型以上になる場...
-
while文を使った問題なのですが...
-
C言語初心者です。次の問題で質...
-
C言語 数字以外を入力させない...
-
初心者です。
-
C++での乱射ショットについて教...
-
if文
-
raspberrypiでロータリエンコーダ
-
C言語で電卓を作成する。
-
双方向リスト
-
入力した数値を0~3乗するプロ...
-
scanfが実行されません
おすすめ情報