2012-05-11 112 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 「成份名稱:數量:成份名稱:數量:......」 等

+0

「ing」是什麼類型? – JaredPar

+3

即EOF,其他錯誤等。一般來說,你必須檢查程序中的返回碼 – 2012-05-11 21:36:33

+0

我的不好,ing是一個字符串。 –

回答

3

不知道什麼fil是。

我認爲你的問題是你需要刷新循環底部的cin.ignore()流(或者輸入cin.getline()來獲得輸入)。否則,輸入結尾處的換行符(當您按Enter鍵提交輸入時)會保存爲下一個cin,即您的cin >> ing。所以換行符會在那裏用完,而實際上並沒有要求用戶輸入新的內容。

+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; (「Recipes.dmr」,ios :: in | ios :: app); cout <<「配方的名稱是什麼?」 << endl; cin >> name;對於(int i = 0; i > temp) { if(temp == name) { cerr <<「具有該名稱的配方已經存在」<< endl; 返回false; } } cout <<「---- Add ingredients ----」<< endl; cin.clear(); (ing!=「0」) { 等 –