ホームページ  >  記事  >  バックエンド開発  >  `cin` は C の入力をどのように処理しますか?また、行全体を読み取るにはなぜ `getline()` が好まれるのでしょうか?

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 09:12:27586ブラウズ

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()」を使用した更新された入力メソッドは次のとおりです。

<code class="c++">void input()
{
    cout << "Enter string :";
    cin.getline(str, sizeof str);
}

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

追加の考慮事項

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

<code class="c++">#include <iostream>
#include <string>

class String
{
public:
    std::string str;

    void input()
    {
        cout << "Enter string :";
        std::getline(std::cin, str);
    }

    void display()
    {
        std::cout << str;
    }
};</code>

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

以上が`cin` は C の入力をどのように処理しますか?また、行全体を読み取るにはなぜ `getline()` が好まれるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。