私はeofとgetcharの下にしようとしています()
以下に示すコードの一部。末尾にctrl + zを付けて文字のセットを入力するときはいつでも、getchar()のEOFをマークする必要があります。すべての文字を、ASCII値が26の最後の別の文字と一緒に印刷しています。名前で文字がわかりません。
ctrl + zを入力すると、プログラムが終了することを期待しています。ただし、Ctrl + zは、入力ストリームが空の場合にのみ機能します。
プログラムを終了する代わりに、なぜそのようなawkard文字を返すのか誰かが説明できますか?
#include<stdio.h>
#include<ctype.h>
int main(){
int c;
while((c = getchar()) != EOF)
putchar(c);
return 0;
}
申し訳ありませんが、画像をアップロードできませんでした。また、その値が26の文字を表示する方法もありません。ASCIIテーブルチャートでは、26は/ replace /であると示されています。それが何を意味するのかわかりません。ありがとうございました。
回答
Ctrl + Zは、Ctrl + A、Ctrl + B、Ctrl + @などのASCII制御文字です。そうではありませんEOF
。EOF
は他の文字とは異なります。そうでない場合、getchar()
その値が返された場合、ファイルの終わりに到達したのか、その文字を読み取ったのかがわかりません。Ctrl + ZのASCII値は26です。入力した内容が表示されます。
オペレーティングシステム(おそらくWindows)では、行の先頭にあるCtrl + Zは、入力が終了したことを端末に示します。(より正確には、コードはターミナル自体からではなく、ターミナルから読み取るライブラリ関数にあると思います。しかし、私はWindowsの専門家ではないため、詳細が間違っている可能性があります。)最初からしか機能しません。これは、ターミナルから読み取るライブラリコードが機能するためです。行の先頭にCtrl + Zを入力するgetchar()
と、ファイルの終わりの状態が表示され、が返されますEOF
。
行の先頭ではなくCtrl + Zを入力すると、通常の文字として扱われます。Windowsは、印刷できない文字を示すために使用する「奇妙なグリフ」として印刷します。
ほとんどのASCII文字の公式の意味はずっと前に忘れられていました。「ファイルの終わり」、より正確には「送信の終わり」を意味するために使用されるASCII制御文字があります。これはCtrl + Dであり、Unixオペレーティングシステムファミリでは、で入力すると「入力の終わり」を意味します。 WindowsのCtrl + Zによく似た、端末の行の先頭。Ctrl + ZとWindowsのファイルの終わりとの関連付けは、MicrosoftのDOSとWindowsがインスピレーションを得たオペレーティングシステムの異なる歴史的なライン、主にDECから来ています。
あなたとまったく同じ質問ではありませんが、この回答をお勧めします。これは、についての混乱を解消するのに役立ちますEOF
。