2017-07-14 3 views
-1

私はCからこの新しい言語に移行しようとしていますが、提供する新しいものを使用して完全な初心者です。おかげでサポートのためstd :: coutは 'implitationsを使用しています - 出力を理解しません


質問は、簡単に直接、「」STDに何をするのか:: coutのでしょうか?

#include "includes.h" 

int main(){ 

    char c1 = 'x', c2; 
    int i1 = c1 , i2 = 'x'; 

    c2 = i1; 

    std::cout << c1 <<'<< i1 <<'<< c2 <<'\n'; 

} 

私はビャーネ・ストロヴストルップブック(第2版「C++を使用したプログラミングの原則と実践」)から、このコードをコピーして、わずかな違いをしました。その中で、彼は出力がx 120 xまたはx 120xになると言った(私の目は印刷物との違いを捉えていない)が、そうではない。

+3

Bjarneが書いたときに酔っていない限り、そのコードはかなりひどくコピーされました:-)あなたは再チェックと編集をお勧めします。 – paxdiablo

+0

Shouldn '一重引用符ではなく二重引用符で囲んでください。 – Vivick

+0

母、それを今見て、大きな変化はありません。 元のコードはこれです char c = 'x'; int i1 = c; int i2 = 'x'; char c2 = i1; cout << c << '<< i1 <<' << c2 << '' \ n '; 私は中毒に向かっています。しかし、まだ、この使用の結果は何であるか分かりません。 – theBotelho

答えて

1

書籍に印刷の問題があるか、間違ってコピーしたようなものです。それはおそらく次のようになります。

std::cout << c1 << ' ' << i1 << ' ' << c2 <<'\n'; 

' 'は、単一のスペース文字であるので、これはi1に番号の前後にスペースを入れます。これは、印刷されます。

x 120 x 

DEMO

1

一重引用符は、サラウンド文字リテラルを意味します。同様に:

'A' 'C' 'x' ' ' '5' etc. 

単一引用符'(複数文字リテラルからなる)文字列リテラルを囲むように意図ので、何をする間違っていません。

`Hello World` 

またはあなたの場合:

'<< i1 <<' 

大文字のルールは、文字リテラルを単一引用符で囲む場合'a'文字列リテラルを扱うときは二重引用符で囲みます:"Some string 123"。 あなたは、単に、その後i2変数をプリントアウトしようとしている場合は、使用します。

std::cout << c1 << i1 << c2 << '\n'; 

更新: が規則には例外があります。いくつかの実装では、マルチ文字リテラルを単一引用符で囲むことをサポートしています。

マルチキャラクタリテラルは、int型と実装定義された値を持ちます。

6.4.4.4/10のC11仕様では、この件に関する詳細情報があります。

+0

彼は実際にそこに文字列を印刷するつもりはないと思う。彼は間違ったものをコピーしたにちがいありません。そして、 'i1'の左右にcharリテラルがいくつかあるはずです。 – Barmar

+0

@Barmar私は同意します。私は答えを更新しました。 – Ron

+0

一重引用符の中に複数の文字を入れることができます。振る舞いは実装定義です –

0

まずあなたが'a'"a"の違いを理解する必要があります。

'a'は文字リテラルです。それはタイプcharであり、ほとんどのシステムで97という値(文字のASCII/Latin-1/Unicodeエンコードa)です。

"a"は文字列リテラルです。これはタイプconst char[2]であり、値が'a'および'\0'の2 charの配列を指します。すべてではないがほとんどのコンテキストでは、"a"への参照は暗黙のうちに文字列の最初の文字へのポインタに変換されます。

両方

cout << 'a'; 

cout << "a"; 

同じ出力を生成するために起こるが、異なる理由のために。最初の文字は1文字の値を出力します。 2番目の文字は、文字列の末尾にある文字('\0'を除く)のすべての文字を連続して出力します.1文字は'a'です。

ストリングリテラルは、任​​意に長くすることができます("abcdefg"など)。文字リテラルにはほとんど常に1文字しか含まれていません。 (あなたは、このような'ab'として複数文字リテラルを持つことができますが、その値は実装定義であり、彼らは非常にまれに便利です。)

を(あなたが尋ねなかったCでは、'a'はタイプintであります"a"は、タイプchar[2]const)です)。

あなたのケースでは、次のようにタイプコードを入力してください:'<< i1 <<'は文字リテラルです。 char

関連する問題