「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > `cin` は C++ で入力をどのように処理しますか?また、行全体を読み取るにはなぜ `getline()` が好まれるのでしょうか?

`cin` は C++ で入力をどのように処理しますか?また、行全体を読み取るにはなぜ `getline()` が好まれるのでしょうか?

2024 年 11 月 13 日に公開
ブラウズ:493

How does `cin` handle input in C   and why is `getline()` preferred for reading entire lines?

C の "cin" による入力ストリームの動作

C で "cin" ストリームを使用して入力を読み取る場合、その動作を理解することが重要です。さまざまなデータ型と対話します。デフォルトでは、「cin」は一度に単語を読み取ります。これにより、文字配列または文字列を処理するときに予期しない動作が発生する可能性があります。

提供されたコード例では、「String」の「input()」メソッドが" クラスは "cin >> str;" を使用します。入力文字列を読み取ります。ただし、このステートメントは 1 つの単語のみをキャプチャし、入力内の後続の単語は無視します。その結果、入力に「steve hawking」などの複数の単語が含まれる場合、最初の単語「steve」のみが「str」配列に格納されます。

解決策: getline( を使用する) ) 完全な行を読み取る

入力の完全な行を文字配列に読み取るには、「cin >>」の代わりに「getline()」関数を使用できます。 「getline()」を使用した更新された入力メソッドは次のとおりです:

void input()
{
    cout 

"getline()" は、宛先配列へのポインターと配列のサイズという 2 つの引数を取ります。改行文字が見つかるまで入力を読み取り、入力行全体を効果的にキャプチャします。

追加の考慮事項

文字列操作に文字配列を使用すると、次のことが可能になることに注意してください。面倒で間違いが起こりやすい。 C 標準ライブラリは、文字列処理に対するより堅牢でタイプセーフなアプローチを提供する「std::string」クラスを提供します。文字配列を使用する代わりに、コードを次のように書き換えることもできます:

#include 
#include 

class String
{
public:
    std::string str;

    void input()
    {
        cout 

最後に、「iostream.h」や「conio.h」などのヘッダー ファイルの使用は時代遅れです。最新の C 開発では、それぞれ「iostream」や「conio」などのヘッダー ファイルを使用する必要があります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3