2012-05-11 31 views
1

簡単な質問:このwhileループは入力を待つのはなぜですか? (INGは文字列です)whileループがcinを待たないでください

while(ing != "0") 

{ 
    cout << "Ingredient name: "; 
    cin >> ing; 
    for(int i = 0; i < ing.length(); i++) 
    { 
     if(ing[i] == ' ') 
     ing[i] = '#'; 
    } 
    fil << ing << ':'; 
    cout << "Quantity: "; 
    cin >> quant; 
    fil << quant << ':'; 
} 

それは単に "成分名:数量:成分名:数量:..." spammsとfilが何であるかそう

+0

「ing」のタイプは何ですか。 – JaredPar

+3

すなわちEOF、その他のエラーなど。通常、プログラムの戻りコードを確認する必要があります。 –

+0

私の悪いですが、ingは文字列です。 –

答えて

3

にわからないが。

私はあなたの問題は、ループの最後にcin.ignore()でストリームをフラッシュする必要があると思います。そうでない場合は、入力を得るためにcin.getline()を実行してください。それ以外の場合は、入力の最後の改行(入力を送信するためにEnterキーを押したとき)は、cin >> ingの次のcinのために保存されます。したがって、改行はそこで使い果たされ、ユーザーに新しい入力を求めることはありません。

+1

@Yoanこのコードの前にcinを使用する場合は、これらのチェックを*の前に置く必要があるかもしれません。 – emsr

0

私はこのコードを試しましたが、問題はありません(Visual Studio 2008)。コードをもっと投稿してください。私は助けに全力を尽くすつもりです。

// CinProblem.cpp : Defines the entry point for the console application. 
// 

#include <stdio.h> 
#include <tchar.h> 
#include <string> 
#include <sstream> 
#include <iostream> 

using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    string ing; 
    stringstream fil; 
    int quant = 0; 

    while(ing != "0") 
    { 
     cout << "Ingredient name: "; 
     cin >> ing; 
     for(int i = 0; 
      i < (int)ing.length(); 
      i++) 
     { 
      if(ing[i] == ' ') 
      ing[i] = '#'; 
     } 
     fil << ing << ':'; 
     cout << "Quantity: "; 
     cin >> quant; 
     fil << quant << ':'; 
    } 

    system("pause"); 

    return 0; 
} 
+0

bool addRecipe() { string name、temp、ing; char tmp; int quant; fstream fil( "Recipes.dmr"、ios :: in | ios :: app); cout << "レシピの名前は?" << endl; cin >> name; (name [i] == '') name [i] = '#';(int i = 0; i > TEMP) {が(TEMP ==名) {CERR << "という名前のレシピが既に存在する" 場合<< ENDL。 falseを返します。 } } cout << "----成分を加える----" << endl; cin.clear(); while(ing!= "0") { など –

関連する問題