質問編集履歴

1 誤字

Takayou

Takayou score 15

2019/09/02 23:51  投稿

istream &get()がループの中で読み込まれない
C++初学者です.
書式不定入出力関数のget(),put()について質問があります.
「ユーザーが$記号を入力するまで, put()を使用して入力内容をファイル書き出し続ける」というプログラムを作成したのですが, 期待した出力が得られませんでした.
プログラムを以下に示します.
```C++
#include<iostream>
#include<fstream>
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用です1-------
***check用***
: a
------check用です1-------
***check用***
: a
------check用です1-------
: a
------check用です1-------
***check用***
: a
***check用***
: $
```
これに対し, 現在のプログラムでの出力は以下のようになっています.
```ここに言語を入力
$で終了します
------check用です1-------
***check用***
: a
------check用です1-------
: ------check用です1-------
***check用***
: ***check用***
: a
------check用です1-------
: ------check用です1-------
***check用***
: ***check用***
: a
------check用です1-------
: ------check用です1-------
***check用***
: ***check用***
: $
```
このように, 「2回に一回get()が一度読み込まれずにループを抜けているように見える」のですが,whileループ内で何が起こっているのでしょうか? また,どのように解決すれば良いのでしょか?
拙い文章で申し訳ないですが,よろしければ回答お願いします!
また,今「独習C++」という本で勉強を進めているのですが,この次に学習するべき参考書等ありましたら教えてください.
  • C++

    8536 questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る