3

私はC++の初心者なので、この質問がばかげていると思われる場合は申し訳ありません。

私はこの小さなプログラムを作成して、次のプロパティに慣れるようにしましたcin

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string next;
    cout<<"Enter your input.\n";
    cin>>next;
    cout<<next;
    return 0;
}

\nキーボード入力から入力すると、返されまし\nた。

また、次に変数を文字列から文字に変更し、上記と同じ入力を行った場合、返されるのは。のみでした\

私の質問は:なぜ私は代わりに新しい行で戻されないのですか?キーボードからの入力を改行文字としてcin認識しませんか?\nそれとも、それはただ適用できcoutますか?

4

3 に答える 3

2

\nC++ のエスケープ シーケンスです。文字定数または文字列リテラルに現れると、2 つの文字シーケンスは、デフォルトの基本エンコーディング (最近のシステムではほとんど常に 0x0A) の新しい行を表す 1 つの文字に置き換えられます。C++ では、このようなエスケープ シーケンスが多数定義されており、すべて . で始まり\ます。

入力は、多くの場合、デバイスによって異なる方法でマッピングされます。キーボードから読み取る場合、ほとんどのシステムは行全体をバッファリングし、Enter キーが押されたときにのみ文字を返します。Enter キーが C++ プログラムに送信する内容は異なる場合があり、ファイルがテキスト モードで開かれたかバイナリ モードで開かれたかによっても違いが生じる可能性があります。テキスト モードでは、C++ ライブラリは OS とネゴシエートして、Enter キーがは常に で表される単一の文字になり\nます。(std::cinは常にテキスト モードで開かれます。) キーボード ドライバーが何か特別なことを行うかどうかは\、ドライバーによって異なりますが、ほとんどの場合はそうではありません。C++ は\、キーボードから入力するときに特別なことは何もしません (そして\n文字列リテラルと文字定数以外では、C++ ソース コードでは特別な意味はありません)。

于 2012-05-28T10:17:53.630 に答える
2

\nプログラムが入力時に改行文字として 認識する必要がある場合は、これを確認できます: https://stackoverflow.com/a/2508814/815812

マイケルの言うことは完全に正しい。

同様の方法で試すことができます。

于 2012-05-28T10:10:15.373 に答える
2

技術的に言えば、これはプログラムの外部に依存しますが、端末が単に '\' と 'n' 文字に対応する個々のバイトを渡すと仮定すると (正気な人はそうすると思います)、あなたが見ている動作は予想されます。 .

"\n" は、ASCII リターン キーの概念をより簡単に表現できるようにするために、プログラミング言語と環境に追加されたショートカットにすぎません。これは文字そのものではなく、Enter キーを押すことに対応する印刷不可能な文字を生成するようにプログラムに指示するコマンドにすぎません。

メモ帳などで Tab キーを押したとします。それはスポットにタブを付けます。「\t」と入力すると、リテラル文字「\」と「t」が入力されます。内部的には、メモ帳を書いた人は誰でも、ユーザーが Tab を押したときに何をすべきかを言わなければなりませんでした。

if(key == '\t') {
    // tab over 
}
于 2012-05-28T10:10:29.623 に答える