2017-02-23 8 views
-2

私はクラスのための小さな机上費用プログラムを作っています。私はそれにループを入れたいと思っていました。しかし、プログラムの終わりに戻り、それを最初に戻すたびに、私は顧客名を要求する部分をスキップし、それを空白のままにします。どのようにそれを修正するための任意のアイデア?ループ内で文字列がリセットされないのはなぜですか?

は、ここに私のコードです:

#include <iostream>   // needed for Cin and Cout 
#include <string>    // needed for the String class 
#include <math.h>    // math functions 
#include <stdlib.h>    
using namespace std; 

#define baseCost 200.00 
#define drawerPrice 30.00 

int main(void) 
{ 
    while(true) 
    { 
     string cname; 
     char ch; 

     cout << "What is your name?\n"; 
     getline(cin, cname); 

     cout << cname; 

     cout << "\nWould you like to do another? (y/n)\n"; 
     cin >> ch; 

     if (ch == 'y' || ch == 'Y') 
      continue; 
     else 
      exit(1); 
    } 

    return 0; 
} 
+2

メインループはありますか?これはコンパイルされますか? >。< – OMGtechy

+0

問題がループ&文字列であることが分かったので、コードをそれだけに減らすことはできますか?そうすれば誰にとっても簡単になります。 (P.S: 'while(true)int main(){...'何?) – Borgleader

+1

あなたの質問を[編集]して[mcve]を提供してください。 –

答えて

0

問題は、あなたが終了のためのあなたのプロンプトの後)(cin.ignoreをコールする必要があるということです。 cinを使って 'ch'変数を取得すると、改行文字は引き続き入力バッファに格納されます。その文字を無視するには、cin.ignore()を呼び出します。

これを行わなければ、プログラムは2番目のループの名前として改行を出力することに気づくでしょう。

また、 'ch'変数を 'cname'のような文字列にして、cinの代わりにgetlineを使用することもできます。次に、cin.ignore()を呼び出す必要はありません。

#include <iostream>   // needed for Cin and Cout 
#include <string>    // needed for the String class 
#include <math.h>    // math functions 
#include <stdlib.h> 
using namespace std; 

#define baseCost 200.00 
#define drawerPrice 30.00 

int main() 
{ 
    while(true) 
    { 
     string cname; 
     char ch; 

     cout << "What is your name?\n"; 
     getline(cin, cname); 

     cout << cname; 

     cout << "\nWould you like to do another? (y/n)\n"; 
     cin >> ch; 

     // Slightly cleaner 
     if (ch != 'y' && ch != 'Y') 
      exit(1); 

     cin.ignore(); 

     /* 
     if (ch == 'y' || ch == 'Y') 
      continue; 
     else 
      exit(1); 
     */ 
    } 

    return 0; 
} 
+0

はい!ありがとうございます。 –

+0

チャンスを取ったときに、答えの横にあるチェックマークをクリックしてください。 – vincent

関連する問題