

C++を利用して「英語で名前をコンソールから入力し、英語のイニシャルを出力するプログラム」を作成しています。

下記のように作成してうまくいったのですが以下の2点、お伺いできますと幸いです。

  1. `cin.ignore()`の使い方を教えていただけると幸いです。。  
(どういった使い方をして引数には何を指定すべきなのでしょうか)

  2. `<istream>`はどういったライブラリなのでしょうか。

  3. 今回のプログラムで`<istream>`と`<iomanip>`は必要でしょうか。

上記の解答をグーグル等で検索してみたのですがよくわからなかったので教えてくださいますと幸いです。

* * *
[code]

    #include < iostream >
    #include < string >
    #include <istream>
    //#include < iomanip >
    
    using namespace std;
    int main(void) {
    
    char firstInitial;
    char lastInitial;
    
    cout<< "Enter your first and last name:";
    
    firstInitial = cin.get();
    
    cin.ignore(256 , ' ');
    
    lastInitial=cin.get();
    
    cout << firstInitial<<lastInitial;
    
    return 0;
    }
    
[/code]

実行結果  
Enter your first and last name :Harry Truman

HT


CC BY-SA 4.0
2018-02-01T00:25:07.507
41363
2018-06-03T06:07:09.050
2018-06-03T06:07:09.050
3060
25686
question
c++
cin.ignore()の使い方と<istream>に関して


A1. <https://cpprefjp.github.io/reference/istream/basic_istream/ignore.html>  
要するに「文字数」または「特定文字が現れるまで（その特定文字の最初の１回を含む）」読み飛ばすわけです。  
提示例では 256 文字を、またはスペースが現れるまで、読み飛ばす（そのスペースの１つ目も読み飛ばし対象）ということになります。試しに 256 でなくて 2
くらいを指定すると違いがわかるでしょう。あるいは `Harry Truman` と入力してもいいでしょう（区切りスペースとして２個入力する）。

A2. <https://cpprefjp.github.io/reference/istream.html>  
`<istream>` は「ストリーム入力」を行うための機能を使うという意味ですね。  
この例では `cin` つまり標準入力ストリームを使っているため必要です（が次の回答を参照）

A3. <https://cpprefjp.github.io/reference/iostream.html>  
`<iostream>` を指定すると（リンク先にて書いてあるとおり） `<ios>` `<streambuf>` `<istream>`
`<ostream>` を全て `#include`
したことになります。良く使う機能を一括で指定できて便利だが、不要な機能も同時にコンパイル対象になるかもしれないということです。提示例では先に
`#include <iostream>` しているので、改めての `#include <istream>` は不要。

<https://cpprefjp.github.io/reference/iomanip.html>  
マニピュレータを使う（フォーマット付き入出力をしたい）ときには `<iomanip>`
が必要です。提示例ではフォーマット付き入出力をしていないので無くても動きます。

<https://cpprefjp.github.io/reference/ostream.html>  
`endl` なんかもマニピュレータですが、使用頻度の違いにより `<iomanip>` でなく `<ostream>` にて定義されています。

[c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示")
のこの辺の関数とかクラスとかは最初のうちは関係がわかりにくいかもしれません。  
`istream` を探しているのにヒットするのは `basic_istream` ばかりとか。  
理解が進むと「実は同じもの」なのだと納得できる時が来ます。


CC BY-SA 3.0
2018-02-01T02:29:00.270
41368
2018-02-01T02:29:00.270
8589
41363
answer