2012-05-11 5 views
1

빠른 질문 : while 루프가 입력을 기다리지 않는 이유는 무엇입니까? "성분명 : 수량 : ... : 수량 성분 이름을"등while 루프를 기다리는 루프

+0

'ing'의 유형은 무엇입니까? – JaredPar

+3

즉 EOF, 기타 오류 등. 일반적으로 프로그램의 반환 코드를 확인해야합니다. –

+0

잘못된 것이고 ing은 문자열입니다. –

답변

3

없음 fil 확실히 무엇인지에

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 (ING는 문자열이다).

당신의 문제는 루프 하단에 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() { 문자열 이름, temp, ing; char tmp; int quant; fstream fil ("Recipes.dmr", ios :: in | ios :: app); cout << "조리법의 이름은 무엇입니까?" << endl; cin >> name; (int i = 0; i > TEMP) { 이 (임시 == 명) { cerr << "해당 이름의 레시피가 존재"<< 경우 ENDL; false를 반환합니다. } } cout << "---- 성분 추가 ----"<< endl; cin.clear(); while (ing! = "0") { 등 –