C ++のiostreamクラスを使用したコンソールの管理

Managing Console With Iostream Classes C



コンピューティングでは、コンソールはコンピューターのキーボードとコンピューターのモニターです。以前は、出力はモニターに表示されるウィンドウではなく、モニター画面に直接送信されていました。通常のコンピューターユーザーの場合、今日のアプリケーションはモニターを明示的に使用しません。これらのアプリケーションは、モニターに表示されるウィンドウを使用します。ただし、コンピュータープログラマーは引き続きモニター画面を使用する必要があります。プログラマーは依然としてモニター画面を使用する必要がありますが、オペレーティングシステムではそれを許可していません。オペレーティングシステムは、モニター画面をシミュレートするウィンドウを提供します。 Windowsオペレーティングシステムでは、このウィンドウはコマンドプロンプトと呼ばれます。 Linuxオペレーティングシステムとそのバリアントでは、このウィンドウはターミナルと呼ばれます。

読者は、コマンドプロンプトまたはターミナルの使用方法をすでに知っていることが期待されます。この記事では、キーボードから文字と文字列を読み取り、端末(またはコマンドプロンプト)に文字と文字列を送信する方法について説明します。すべてのC ++プログラマーは、この記事で知っておく必要があります。







キーボードからの入力と端末への出力を行うには、プログラムは次のように開始する必要があります。



#含む
を使用して 名前空間時間;

記事の内容

標準iostreamのナローストリームオブジェクト

iostreamクラス、標準オブジェクト、cout、cin、cerr、およびclogはインスタンス化されており、すでに標準ライブラリにあります。プログラマーは、それらを再度インスタンス化せずに使用するだけです。



費用

main()関数の次のステートメントは、テキストを送信します。これは出力されます。ターミナルへ:





費用 << 「これが出力されます。」;

coutは、標準ライブラリの出力iostreamオブジェクトであり、すでにインスタンス化されています。<< is the insertion operator, which sent the bytes, This is output. to the output stream object, cout. When the statement is executed, the text appears on the screen.

上記のステートメントでは、再表示されたコマンドプロンプトが出力フレーズの右側に表示されます。次の行には行きません。次のステートメントの最後にあるendlは、画面によって印刷されたものをすべて次の行に強制します。



費用 << 「これが出力されます。」 <<endl;

endlは事前定義された変数です。画面のコンテンツは、次の行に強制することもできます。

費用 << 「これが出力されます。」 << 'NS';

「 n」を使用すると、テキストのすべての行がすぐに画面に表示されない場合があります。 endlは、テキストの全行を画面にフラッシュします。

注:coutに送信される文字列は二重引用符で囲まれ、送信される文字は一重引用符で囲まれます。一連の文字列と文字を1つのステートメントで送信でき、それぞれの前に<< . All that will appear in one line at the output if ‘ ’ is not in the series.

ジン

cinは、標準のiostream入力オブジェクトであり、すでにインスタンス化されており、標準ライブラリで利用できます。 main()関数の次のコードセグメントについて考えてみます。

chartxt[50];
費用 << 「単語を入力してEnterキーを押します:」 txt;
費用 <<txt<<endl;

最初のステートメントは、50文字の空の配列を宣言します。 2番目のステートメントは、次の画面行に単語を入力してEnterキーを押すようにユーザーに指示します。画面の次の行にテキストを入力するようにユーザーに強制する「endl」の使用に注意してください。ユーザーがテキストを入力すると、入力されたテキストがcinオブジェクトに入るときに画面にエコーされます。 Enterキーを押すと、コードセグメントの3番目のステートメントが実行されます。この3番目のステートメントは、入力されたテキストを変数txtに送信します。この場合、入力するテキストは50文字を超えてはなりません。抽出演算子>>の使用に注意してください。最後のステートメントは、入力されたテキストを画面に表示します。

cinは、スペースで区切って、キーボードから複数の単語を取得できます。これらの単語は、さまざまな変数に抽出する必要があります。次のコードセグメントはこれを示しています。

chartxt[20];
intそれ;
浮くフィート;
費用 << '3つの値を入力し、Enterキーを押します:' txt>>それ>>フィート;
費用 <<txt<< '' <<それ<< '' <<フィート<<endl;

次のステートメントに注意してください。

ジン >>txt>>それ>>フィート;

最初の単語がtxtに抽出され、次の単語がftに抽出されます。入力が次の場合、

25 3.6

その場合、コードセグメントによる出力は次のようになります。

25 3.6

cerr

次のプログラムにエラーがあります。

#含む
を使用して 名前空間時間;

int主要(()。
{{
myIntで;

戻る 0;
}

main()の最初のステートメントが正しくありません。コードを持つファイルの名前がtemp.ccで、結果の実行可能ファイルがtempと呼ばれる場合、次のg ++​​コマンドは、コンパイラエラーメッセージをファイルerror.txtに送信します。

NS++ -o temptemp。DC 2>>エラー。txt

error.txtファイルが存在しない場合は、作成されます。 g ++コマンドの2> error.txtの部分に注意してください。

画面は標準の出力先であり、標準のエラー先でもあります。 2> error.txtがg ++コマンドから省略されている場合、コンパイラエラーメッセージは標準のエラー宛先に送信されます。これは引き続き画面(モニター)です。

標準出力先を表すストリームオブジェクトはcoutです。標準エラーの宛先を表すストリームオブジェクトはcerrです。プログラムランタイムエラーは、次のように画面に送信できます。

cerr << 「エラーメッセージ!」 << 'NS';

下駄

アプリケーションは、さまざまな時間にさまざまな入力を受け取ります。すべての入力を画面に再表示できます。すべての入力をファイルに保存できます。これはロギングです。標準のログ記録先は画面です。標準のロギングストリームオブジェクトはclogです。次のコードは、入力テキストを画面に再表示します。

chartxt[50];
費用<<「テキストを入力してEnterキーを押します:」txt;
下駄<<txt<<endl;

入力テキストが「input_text」の場合、clogは「input_text」を画面に再表示します。

実際には、ロギングは通常ファイルにリダイレクトされます。次のプログラムはこれを示しています。

#含む
を使用して 名前空間時間;

int主要(()。
{{
freopen(( 'log.txt''の'stdout)。;

費用 << '入力テキスト' <<endl;
}

関数freopen()とその引数の使用に注意してください。その最初の引数は、ログファイルの名前です。ファイルが存在しない場合は、作成されます。その2番目の引数は、「書き込み」の「w」です。その3番目の引数は、標準出力のstdoutです。 main()関数の2番目のステートメントは、coutを使用してロギングテキストをファイルに送信します。注:実際の入力コードは、このプログラムには表示されていません。

キーボードから文字と文字列を取得する

ユーザーが入力を入力している間、文字は入力ストリームバッファーに送信され、画面に表示されます。ユーザーがEnterキーを押すと、すべての文字がバッファーにあります。また、カーソルは画面の次の行の先頭に移動します。次に、プログラムは、入力読み取りステートメントの後、次のプログラムステートメントに進みます。

cinオブジェクトには、このセクションに関係するメソッドがあります。

最初の文字を読む

get(char_type&c):
次のコードセグメントは、入力ストリームバッファから最初の文字を読み取る方法を示しています。

charch;
費用 << '入力テキスト:' <<endl;
ジン得る((ch)。;
費用 <<ch<<endl;

最初のステートメントは、割り当てのない文字を宣言します。 2番目のステートメントは、ユーザーに文字を入力するように指示します。ユーザーが文字を入力してEnterキーを押すと、3番目のステートメントはその文字を入力ストリームバッファーから変数chにコピーします。

ユーザーが複数の文字を入力した場合でも、最初の文字はコードセグメントに使用されます。

得る():
引数なしのget()は、10進数のASCIIコードを返します。次のコードセグメントについて考えてみます。

費用 << '入力テキスト:' <<endl;
費用 << ジン得る(()。 <<endl;

入力が「asdfg」の場合、97が返されます。これは「a」の10進ASCIIコードです。

get(char_type * s、streamsize n)

ユーザーがフレーズを入力してEnterキーを押すと、最初から始まる文字数がcinストリームバッファーから抽出されます。次のコードを使用できます。

charNS[10];
費用 << '入力テキスト:' <<endl;
ジン得る((str、10)。;
費用 <<NS<<endl;

入力が「greatpeople」の場合、出力は「great peo」になり、10文字ではなく9文字になります。文字列NUL文字( 0)は、get引数の10番目の位置になります。したがって、strに9文字を含めるには、そのストレージサイズは少なくとも10であり、get()引数は11である必要があります。入力行全体が必要な場合、文字列ストレージ番号は少なくともその数である必要があります。入力された文字の数に1を加えたものです。したがって、行全体に12文字が入力された場合、その数は文字列(str)ストレージサイズの場合は13、get()引数の場合は13になります。 1つのスペースは1文字としてカウントされることに注意してください。

get(char_type * s、streamsize n、char_type delim)
特定の文字が最初に出現するか、サブ文字列のストリームサイズのいずれか早い方で、右側で区切られたサブ文字列を抽出できます。次のコードへの入力テキストがすばらしい人である場合、すばらしい人が抽出されます。

charNS[30];
費用 << '入力テキスト:' <<endl;
ジン得る((str、6'また')。;
費用 <<NS<<endl;

最初から6番目の位置はスペース文字であり、抽出された部分文字列を排他的に区切ります。 6番目の位置は、唯一の文字「o」の前に最初に来ます。 strのストレージサイズは可能な限り大きくすることができることに注意してください。

次のコードへの入力テキストがすばらしい人である場合、grが抽出されます。

charNS[30];
費用 << '入力テキスト:' <<endl;
ジン得る((str、10'と')。;
費用 <<NS<<endl;

'e'の最初の出現は、10番目の位置の前に最初に来ます。

行のすべての文字を取得する

Enterキーを押すと、次のコードに示すように、行に入力されたすべての文字を取得できます。

費用 << '入力テキスト:' <<endl;
その間 ((1)。 {{
charch= ((char)。ジン得る(()。;
費用 <<ch;
もしも ((ch== 'NS')。
壊す;
}

(char)を使用したキャストでは、各10進数が対応するASCII文字に変換されます。

ピーク()

get()メンバー関数は、次の文字を読み取るだけではありません。ストリームバッファから削除します。ただし、peek()メンバー関数は、次の文字(最初の文字から始まる)をバッファーから削除せずに単純に読み取ります。次のコードでは、各文字は、get()関数によって削除される前に、まずpeek()関数で読み取られます。ユーザーがEnterキーを押した後に発生するすべてのこと:

費用 << '入力テキスト:' <<endl;
その間 ((1)。 {{
charch= ((char)。ジンピーク(()。;
費用 <<ch;
ジン得る(()。;
もしも ((ch== 'NS')。
壊す;
}

次の文字がget()によって削除されなかった場合、peek()は最初の文字のみを読み取り、ループは無期限に繰り返されます。

Enterキーを押す前の文字の表示と削除

cinオブジェクトでは、アクションを実行する前にEnterキーを押す必要があることに注意してください。さて、Enterキーを押す前に入力および消去中に文字を表示することは可能です。ただし、これはオペレーティングシステムとのインターフェイスを意味します。オペレーティングシステムは異なります。つまり、これはオペレーティングシステムごとに異なるコーディングを意味します。したがって、このトピックはまったく異なるチュートリアルに値します-後で参照してください。

文字と文字列をモニターに送信する

coutオブジェクトは出力ストリームオブジェクトであり、すでにインスタンス化されており、C ++標準ライブラリに存在します。 coutは、文字と文字列をモニターに送信する際に使用される主要なオブジェクトです。これは、挿入演算子を使用して行われます。<< . With the cin object, the text is obtained line-by-line. With the cout object, the text is added onto the same line until ‘ ’ or endl is encountered.

スカラーになる式は、挿入演算子の引数にすることができます。演算子はスカラーをテキストに変換し、テキストをcoutオブジェクトストリームに配置します。テキストがcoutオブジェクトに送信されると、通常は画面(モニター)に表示されます。ただし、すぐに表示されない場合があります。テキストを画面に強制的に表示するには、テキストを挿入した直後に特別な値endlを挿入します。これにより、テキストが画面にフラッシュされ、改行が追加されます。注:「 n」は単に改行を追加しますが、画面にテキストをフラッシュしません。

次のプログラムは、int、float、および通常のテキストの値を画面に出力する方法を示しています。

#含む
を使用して 名前空間時間;

int主要(()。
{{
intそれ= 5;
浮くフィート= 63.5;
費用 << 'NS ' <<それ<< 'アイテムの費用は$' <<フィート<< ' 我ら。' <<endl;

戻る 0;
}

出力は次のとおりです。

NS5アイテムの費用は$63.5我ら。

次のプログラムは、クラスからインスタンス化されたオブジェクトの文字列がどのように出力されるかを示しています。

#含む
を使用して 名前空間時間;

構造体NS{{
charNS[十一] = 「いくつかの言葉」;
}obj;

int主要(()。
{{
費用 <<obj。NS << 'NS';

戻る 0;
}

出力は「いくつかの単語」です。

C ++プログラムの引数

プログラムの実行はmain()関数から始まります。 main()関数には、実際には2つのオプションのパラメーターがあります。オプションのパラメーターを指定したmain()関数の構文は次のとおりです。

int主要((intargc、char *argv[argc])。
{{

戻る 0;
}

実行可能C ++ファイルの名前がtempであると想定します。プログラムがその環境(オペレーティングシステム)から必要とする、ユーザーが入力した引数は、であると想定します。

記事3本のペン'大きな家'

ここには5つの議論があります:記事、3、本、ペン、そして大きな家

それぞれがテキストです。プログラムへの番号付き引数はテキストです。つまり、各引数は文字列です。大きな家はフレーズなので引用符で囲んでいます。このプログラムを実行するためのターミナルコマンドは次のようになります。

/一時的な記事3本のペン'大きな家'

ファイルtempがホームディレクトリにあると仮定します。引数はコンマではなくスペースで区切ることに注意してください。

ここで、main()関数の構文では、argcはプログラムの引数の数に1を加えたものです。この場合、プログラムには5つの引数があります。したがって、argcは6です。構文では、argv [argc]は文字列へのポインタの配列です。 argv [0]でのこの配列の最初の値は、コンパイラーによって指定されます。プログラムファイル名へのポインタです。残りの値は、入力されたユーザーの順序でプログラム引数へのポインターです。この配列のサイズはargcです。この場合、サイズは1 + 5 = 6です。

コンパイル時に、次のプログラムの名前がtempであると想定します。

#含む
を使用して 名前空間時間;

int主要((intargc、char****argv)。
{{

費用 <<argv[0] << '、' <<argv[1] << '、' <<argv[2] << '、' <<argv[3] << '、' <<argv[4] << '、' <<argv[5] <<endl;

戻る 0;
}

ここで、配列 'char * argv [argc]'が 'char ** argv'として宣言されていることに注意してください。

このプログラムをターミナルコマンドで実行すると、

/一時的な記事3本のペン'大きな家'

その場合、出力は次のようになります。

/臨時雇用者、記事、3、本、ペン、大きな家

ディレクトリパスは実行可能ファイルの名前に含まれていることに注意してください。

また、プログラムの実行(プログラムの呼び出し)では、argcの値が送信されていないことに注意してください。

結論

iostreamクラスには、cout、cin、cerr、およびclogの4つの重要なオブジェクトがあります。 cinは入力オブジェクトであり、残りは出力オブジェクトです。プログラムの実行中、プログラムへの入力は、プログラムの実行を開始するときとは異なります。プログラムの実行が開始されると、プログラムへの入力は、スペースで区切られて、プログラムを実行するコマンドと結合されます。