質問: C++初学者です. 書式不定入出力関数のget(),put()について質問があります. 「ユーザーが$記号を入力するまで, put()を使用して入力内容をファイル書き出し続ける」というプログラムを作成したのですが, 期待した出力が得られませんでした. プログラムを以下に示します. ``` #include #include using namespace std; int main(int argc,char *argv[]) { char ch; if(argc!=2){ cout << "使い方 : WRITE < ファイル名 > " << endl; return 1; } ofstream out(argv[1], ios::out | ios::binary); if(!out){ cout << "ファイルを開けません" << endl; return 1; } cout << "$で終了します" << endl; do{ cout << "***check用***" << endl; //チェック用 cout << ": "; cin.get(ch); out.put(ch); }while(ch != '$'); out.close(); return 0; } ``` 入力をaとした時に期待する出力は以下です. ``` $で終了します ***check用*** : a ***check用*** : a ***check用*** : a ***check用*** : $ ``` これに対し, 現在のプログラムでの出力は以下のようになっています. ``` $で終了します ***check用*** : a ***check用*** : ***check用*** : a ***check用*** : ***check用*** : a ***check用*** : ***check用*** : $ ``` このように, 「2回に一回get()が一度読み込まれずにループを抜けているように見える」のですが,whileループ内で何が起こっているのでしょうか? また,どのように解決すれば良いのでしょか? 拙い文章で申し訳ないですが,よろしければ回答お願いします! また,今「独習C++」という本で勉強を進めているのですが,この次に学習するべき参考書等ありましたら教えてください.
回答: ファイルに出力しているようですが、ファイルの中身は見ましたか? 多分、一文字ごとに改行が入っていると思います。 > > cin.get(ch); > > > キーボードからの入力ですが、入力する時に、Enterキーを押していると思います。 `a` 2文字の入力となりますので、最初の文字を読んでも次の改行コードが残っているので、次の読み込みになります。