質問: ### 前提・実現したいこと 独習C++という参考書でC++の学習をしています。fstreamヘッダファイルのget()関数を使用した際にエラーが出たわけではないのですが, 出力結果がおかしくなってしまいました. ### 該当のソースコード ``` #include #include using namespace std; int main(int argc, char *argv[]) { char ch; if (argc != 2) { cout << "引数の数が間違っています." << endl; return 1; } ofstream out(argv[1], ios::out | ios::binary|ios::skipws); if (!out) { cout << "出力ファイルが開けません." << endl; return 1; } cout << "$で入力を終了します." << endl; do { cout << ": "; cin.get(ch); out.put(ch); } while (ch != '$'); out.close(); return 0; } ``` ### コンソール画面上での出力結果 ``` $で入力を終了します. : b : : a : : d : : $ 続行するには何かキーを押してください . . . ``` ### 問題点 上記の出力結果なのですが, 自分が想定していたのは以下のようなものでした. 「:」が1つ多く出力されているのが何故なのか考えても分かりません. get()関数に入力を1回スキップする機能などが付いているのでしょうか...? ``` $で入力を終了します. : b : a : d : $ 続行するには何かキーを押してください . . . ```
回答: cin.get(ch); で改行が get されてますね。 出来上がったファイルは b a d となってる。改行がgetされていなければ bad となるハズです。