2016-08-04 9 views
0

私はC++の初心者です(そして一般的なプログラミング)。私はスタッフの連絡先の詳細を読み書きするプログラムを書いた。このコードは正常に動作します。C++:条件文を使用したコンソール出力の出力がありません

// appropriate headers... 

int main() 
{ 
    char trigger{}; 
    int options = 0; 
    bool testing{}; 


    fileIps Inptbox;   // for entering new data 
    char ext_title[20]; char ext_intercomNum[4]; char ext_dept[20]; 

    printf("%s", "Enter Officer's Title:\n"); 
    gets_s(ext_title, 20); 
    printf("%s", "Enter Officer's Intercom Number:\n"); 
    gets_s(ext_intercomNum, 4); 
    printf("%s", "Enter Officer's Department:\n"); 
    gets_s(ext_dept, 20); 

    Inptbox.rcv_values(ext_title, ext_intercomNum, ext_dept); 
    Inptbox.create_string(); 
    testing = Inptbox.validate(); 
    if (testing == true) 
     return -1; 
    else if (testing == false) 
     Inptbox.write_string(); 

    // more code below... 

私の質問はコンソール出力に関するものです。私はまたはのモードを選択することを可能にする条件文を導入しようとしました。上記のコードはのファイルにと記載しています。ファイルよりと読むコードは以下のとおりです。また、大丈夫でした。

私の挑戦は、私は上記のコードのための条件文...

printf("%s", "Enter 1 to WRITE DATA or 2 to READ DATA\n"); 
    cin >> options; 
    if (options == 1) 
    { 
     fileIps Inptbox;   // for entering new data 
     //... rest of code... 
    } 

    // more code below... 

を紹介したら...コンソール上の出力は、最初のエントリのためのプロンプトが表示されるように、欠陥があるが、あるということですユーザは「オフィサーインターホン番号」と入力する必要があります。 3番目のプロンプトはうまくいった。

(すなわち条件を適用する)私はoptionsに値1を割り当てるためにcinを使用する場合、さらに詳述すると、コンソールはすぐにそれは不可能私のために作る... ...

Enter Officer's Title: 

Enter Officer's Intercom Number: 

を印刷します最初のエントリ(つまり、 'タイトル')を入力します。

私はこれに苦労し、それを解決するためにいくつかのことを試しました。私はfgets()を使って、gets()でそれを試しました。私はクラスを再訪したが、何も働かなかった。私はバッファリングのようなことについて広く読んで、このサイトの質問を研究し、cstdioios_baseとその派生クラス(私が他のものをたくさん学んだので良かった)の様々なリソースを見ました。しかし、私のコードから「if」ステートメントを削除しない限り、他には何も試みませんでした。

私の質問は次のとおりです。「この種の動作を説明するにはどうすればいいですか?また、読み書きモードを切り替えるためにコードを実装するにはどうすればよいでしょうか?

私はと作業しています。MS Visual Studio 2015です。

+0

「fileIps Inptbox」が(少なくとも私にとっては)混乱していることを指摘したいだけです。一般に、クラスは大文字の名前を持ち、変数は大文字ではありません。 'FileIps inptbox'です。 –

+0

大変申し訳ございません。私がここで使用するクラスはユーザ定義であり、ここでは簡潔にするために定義したくありませんでした。私はコンベンションを教えてくれてありがとう。 –

+0

私は100%は確信していませんが、あなたの問題は 'std :: cin'と' gets_s'を混在させることと思っています。これを見てください[例えば、質問](http://stackoverflow.com/questions/10553597/cin-and-getline-skipping-input)。 –

答えて

0

フォーマットされた抽出演算子 '>>'を使用することには問題があります。この場合、整数に変換できるすべての値が読み込まれます。しかし、あなたが準備が整ったことを伝えるために、あなたは入力を与えなければなりません。 >>演算子はその改行を処理しません。次の入力が読み込まれると、前に与えられた改行文字が表示されます。したがって、「役員の役職」の入力は直ちに改行に設定され、継続されます。

std::string line; 
getline(cin, line); 

文字列をテストするか、またはそれを変換してください。

関連する問題