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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
関数から配列を返すには?
C言語・C++・C#
-
改行を読み飛ばす
C言語・C++・C#
-
ファイルから読み取った改行文字を消す方法
C言語・C++・C#
-
-
4
C言語で改行コードを知る
C言語・C++・C#
-
5
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
6
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
7
fopenで別ディレクトリにファイルをオープンしたい
C言語・C++・C#
-
8
改行までの一文字ずつのファイル読み込み
C言語・C++・C#
-
9
NULLの定義について
C言語・C++・C#
-
10
nullと"、\\0とEOFの違いについて。
C言語・C++・C#
-
11
fgetsで2行目から文字化け
C言語・C++・C#
-
12
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
13
プログラムでの数字につく”f”の意味
C言語・C++・C#
-
14
switch の範囲指定
C言語・C++・C#
-
15
テキストファイルの空行をスキップして次の行をリードする
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
getcの改行判定
-
配列を使って魔方陣
-
#if 1 #elseの意味について
-
SIGALRMでプロセス終了
-
c言語の問題
-
行列をべき乗させるプログラム
-
for文の中にswitch文はいれられ...
-
構文エラー";"が型の前にあり...
-
scanfが実行されません
-
C言語初心者です。次の問題で質...
-
C言語 数字以外を入力させない...
-
配列を関数に渡す方法
-
階乗のプログラム!!
-
c言語のプログラムで
-
プログラミングで二番目に大き...
-
c言語
-
Enterキーを押されたら次の処理...
-
#define _CRT_SECURE_NO_WARNIN...
-
信頼区間の1.96や1.65ってどこ...
-
2÷3などの余りについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
getcの改行判定
-
C言語階乗の総和を求める
-
配列を使って魔方陣
-
while文について、c言語...
-
プログラミングで二番目に大き...
-
C言語 数字以外を入力させない...
-
c言語のwhile文を使った計算で...
-
C言語プログラムが理解できなくて…
-
配列を関数に渡す方法
-
C言語で電卓を作成する。
-
C言語の二分法のプログラムにつ...
-
c言語for文
-
scanf関数を用いての加減乗除%...
-
階乗のプログラム!!
-
計算結果がlong型以上になる場...
-
初心者です。for文、if文を使っ...
-
c言語プログラミングで1から100...
おすすめ情報