EOFが理解できない。
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん
NGNGwhile((c = getchar) != EOF){
putchar(c);
}
のようなプログラムがあるとして
毎回変数cにgetchar()で値を代入していくのに
EOFになる事はあるのでしょうか?
そもそもEOFって何ですか?
本当に解らなくて困っているのでマジレスお願いします。
文字配列の最後が'\0'で終わる事は知っていますが
それとは関係あるのでしょうか?
0002名無しさん@お腹いっぱい。
NGNG>c=getchar
マニュアル読めや!!
0003名無しさん@お腹いっぱい。
NGNG0004名無しさん
NGNG0005名無しさん
NGNGc = getchar()の間違いです。
0006名無しさん
NGNG00073
NGNGEOF は文字コード(0xFF) に割り当てられてる制御用の特殊文字
\0 も文字コード(0x00) に割り当てられてる制御用の特殊文字
00083
NGNGバイナリファイルではファイル中に EOF(0xFF) と同じデータがある可能があるので使えない。
0009名無しさん
NGNG例えば32bitの整数型に32bitの最大数+1をgetchar()すると
EOFになるという事でしょうか?
0010名無しさん
NGNG0011虹
NGNGだけど。
手元のLinuxだとEOFは(-1)で、getcharはintだから通常の文字列と
かぶることはないと思うけど。処理系依存なのかな。
0012名無しさん@お腹いっぱい。
NGNGEOF = End Of File
文字列はFileではないのでEOFはありえない。
0013虹
NGNG>>9 putchar()の間違い? そうなら、EOFを書き込むってことは普通
できないんじゃないかな。EndOfFileなんだから、ある特定の文字っ
てのは実装としてはあっても、考え方としては正しくないんじゃ
ないでしょうか。
0015>10
NGNG入力の終わりとして char の範囲外で int にある値(たとえば -1)
と解釈してもいいんでは。
char = int の処理系は困るけど。
00163
NGNGていうか Windowsプログラマの俺は getchar() なんて使わなね〜よ。
EUC で EOF(-1) とかぶる文字ってあるのか?
char の -1(0xFF) を int にキャストすると -1(0xFFFFFFFF) に成るだろ?
0017>16
NGNG1はとにかくリファレンス読め。
リファレンスのどこがどう分からないのかを聞け。
0018名無しさん
NGNG今やっと解ったような気がします。
変数の型に規定されていない範囲の値を代入するとEOFとなるのでしょうか?
例えばunsigned int に負の数とか。
0019>18
NGNGEOF は入力の終わりを知るためのシンボルとしての値。
だから値は直接きめられていないし、入力系の関数以外に
使ったり、入力の終わりを知る以外に使うのは正しくないと思うよ。
unsigned int に負の数を代入するとどうなるかは
型変換の問題になると思う。
0020名無しさん
NGNGプログラムにこれ以上入力しない事をどうすれば知らせられるのでしょうか?
00213
NGNG0022>20
NGNGそれとも自前の入力ルーチンに終了を知らせる方法か?
※まさかgetchar()にプログラム内部で値を渡すわけでもあるまい。
0023名無しさん
NGNGOSがプログラムを終了させるのではなくて
CTRL-DでOSがプログラムに入力終了だと告げるのでしょうか?
0024虹
NGNGでもそれ以下でもありません。stdio.hで(-1)が定義されているの
もCの実装上の都合だけでしょう。
あと、DOSの場合は知りませんが、UNIXではCtrl-DでEOFを送る(と
言う表現は正しいのか?)のはshellの役目です。
0025名無しさん@お腹いっぱい。
NGNGcはint型ね。
getchar()はint型を返す関数で、読み込んだ文字またはEOFを返す。
普通は文字は0x0000〜0x00ffでEOFは-1(0xffff)。
その値をcに代入する。
代入式c = getchar()の式の値は代入した値なので、
getchar()の返り値と同じ。
それとEOFを比較してるということ。
0026名無しさん@お腹いっぱい。
NGNGCtrl-Dの機能はshellとは関係なく、ttyデバイスの機能だと思う。
Ctrl-Dの本来の意味は行バッファ中の文字を送信するためのもの。
行バッファが空の場合は、0文字が送信され、これがEOFと解釈される。
だから行の途中でCtrl-Dを入力してもEOFとは解釈されない。
0027名無しさん@お腹いっぱい。
NGNG0029名前ついてますか?
NGNGttyドライバのおかげだよ。
sttyで設定できるものはttyの範疇
ちなみに DOSの ^Zは driverじゃなくて applicationが
扱わなきゃいけない点で、Unixの ^Dとは違ったような。
DOSの C libraryはそこを頑張ってごまかしてくれるけど。
0030名無しさん@お腹いっぱい。
NGNGEOFの状態を知りたいのならそれに用いる専用の関数(eof()とか)を使えば良い
0031名無しさん@お腹いっぱい。
NGNGまずは関数の使い方よりもそこからだろう。
0032名無しさん
NGNG0033名無しさん@お腹いっぱい。
NGNG>入手力ストリーム
取りあえず叫んどけって感じの語感だな。
それはともかく。
入出力を単なるバイトの流れに見えるように抽象化したものだ。
メインフレームのように、
データセットの種類がゴチャゴチャあって
固定レコード長であったり無かったりして
ブロックサイズを一々指定しないといけなかったり
なんかして、というような環境を考えた時に、
入出力をこのように極めて単純な形に抽象化し、
そのように見せることのありがたみが理解出来る。
逆に、UNIXのようなOSを用いていると、あまりに
当然すぎて、よく分からないかもな。
0034名無しさん@お腹いっぱい。
NGNG始めと終わりのあるびろーんと長いもので、テープの端っこまで読んでしまうとEOFと。
getchar()はさしずめコマ送りと言ったところかな。
0035名無しさん@お腹いっぱい。
NGNG1)EOFマクロ
2)ファイルの終端(End Of File)
1)EOFマクロ
これはgetc, fgetc, getcharなどの
ストリームから1文字取得する機能を持つ関数が
ストリームの終わりにくるか(要するにファイルの終端)、
読込みエラーが発生した場合に返される値である
※エラーで中断したかファイル終端まで読んだかの厳密な判定
を行なう場合はfeof, ferrorを行なう場合もある
EOFマクロは大概の処理系では-1に定義されている
2)ファイルの終端(End Of File)
ストリームの終わり
余談
ストリームからデータの取得を行なうその他の関数(fread, fgets etc)
は、ファイル終端まで読んだかを判定するのにはEOFマクロは使わない
こんな感じかな?
0036メモ
NGNG0037ドキュプログラマ
NGNGEOFって、EnterpriseObjectFrameworkのことかとおもった。
ウツダシノウ
0038エ口プロク”ラマ
NGNG0039デフォルトの名無しさん
NGNGってみんな使ったよね
0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNGgetchar
fgetc
getch
getche
ungetc
ungetch
の違いを教えてください。
0042デフォルトの名無しさん
NGNGリファレンスよめ
0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNG>>40
じゃあ、エディタがない状況
たとえば出張先のOSの再インストールとか(そんな状況あるか?)
の時はどうすんの?
0045デフォルトの名無しさん
NGNGa:\vim config.sys
aドライブがないマシンなど知らん
0046デフォルトの名無しさん
NGNG40じゃないので、へ理屈を並べてみる。
1) type con > config.sys ## copy con config.sys と変わらんわい
2) copy config.sys+con config.sys ## 追記(元の内容が残るぞ)
0047デフォルトの名無しさん
NGNG無理にcopyやtypeでやることも無いでしょ。
#俺はVzをFDに入れて持ち歩いてたけど。
0048デフォルトの名無しさん
NGNGC-zなんかでスレッドができていたので思わず
copy conを思い出して書いただけで
実際私もConfigでは使ってないような気がします
何かで使ったんだけどなー
ごめんなさい
0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNG#define EOF void* ( -1 )
だっけ?
0051デフォルトの名無しさん
NGNGアホ。stdio.h調べろ
0052デフォルトの名無しさん
NGNG俺はアホじゃないよ。
0053デフォルトの名無しさん
NGNGエホバの商人って心臓付近の肉売ってるんだろ?
0054デフォルトの名無しさん
NGNGえんどおぶふぁいる。なんでもかんでもりゃくすな。
http://www.ascii.co.jp/ghelp/13/001385.html
あほだとおもうぞ。じかくしょうじょうがないのはさらにまずい。
ぼくちゃん、わかったかな。
0055デフォルトの名無しさん
NGNG54のURLには、「MS-DOSファイルのEOFコードは1Ahである」と書いてある。
あと、PNG Specificationでは
0x1A = The control-Z character stops file display under MS-DOS.
http://www.libpng.org/pub/png/spec/PNG-Rationale.html#R.PNG-file-signature
となっているけど、CマガジンのPNG説明では、その0x1A = EOFって書いてあったんだよ。
0056トリッキーの1
NGNGEOFという文字コードは0x1Aなので、
「MS-DOSファイルのEOFコードは1Ahである」
は間違いじゃ無いでしょうね。英語もほぼ同じ事を言っています。
ここでいうEOFコードというのは、「ここがファイルの終わりだよ」と
作成者が親切に?付けるものなので、その気になれば1つのファイルに
EOFコードをたくさん書くことも可能です。
しかし、標準ライブラリ関数が返すEOF(-1)は、
「ファイルの終わりまで読んだよ」という意味です。
テキストモードで開いた場合、0x1Aを読むとfgetc()などはEOFを返しますが、
バイナリモードで開いた場合、ファイルの本当の最後に行き当たって初めてEOFが返ります。
全く同じ"EOF"という文字で表されるので非常にわかりにくいのですが、
プログラム上で使用するEOFと、ファイルの中にあるEOFコードとは
別物であり、定義が違う事に注意しましょう。
なんかまともに書いてしまった。
テキストモード云々のあたりに自信がないので、
間違ったことがあれば誰か訂正してください。
0057デフォルトの名無しさん
NGNG>edlinは外部コマンドだから手元に無い場合もあるんだしね。
MSDOS標準エディタだから、普通にインストールされていれば
必ず入っていたはず。ちなみにW2Kにも付属している。
0058デフォルトの名無しさん
NGNG標準エディタが手元にない時なんていくらでもあるんだから。
57は一仕事する前に、きっちり準備するんだね
えらいなー
どっかの行き当たりばったりで
内部コマンドだけでがんばってるやつとは違うんだね
0059デフォルトの名無しさん
NGNGFD一枚で動かしてるんじゃなきゃedlinなんて
準備しなくたって入ってるだろ。
0060デフォルトの名無しさん
NGNG別の FD にシステムをコピーしてリブートしたものの、
config.sys を書くのを忘れてたときとか。
■ このスレッドは過去ログ倉庫に格納されています