2012-08-21 3 views
0

좋아요, 전에는 본 적이 없었던 문제에 직면했을 때 약간의 연습 만하고있었습니다.내 프로그램에서 키보드 입력을 기다리는 방법은 무엇입니까?

#include <iostream> 

using namespace std; 

int main() 
{ 
string empname = ""; 
int empage = 0; 
char yes = 'y'; 

cout << "Please enter employee name:" << endl; 
cin >> empname; 
cin.get(); 
cout << "Your name is " + empname + " is this correct? (yes/no):" << endl; 

if (yes) 
{ 
    cout << "good" << endl; 
} 
else 
{ 
    cout << "Please try again" << endl; 
} 

cout << "Please enter employee age:" << endl; 
cin >> empage; 
cin.get(); 
cout << "Your age is " + empname + " is this correct? (yes/no):" << endl; 
if (yes) 
{ 
    cout << "good" << endl; 
} 
else 
{ 
    cout << "Please try again" << endl; 
} 
} 

(< <는 "직원의 이름을 입력하십시오 : \ t"cout을 < < ENDL을)이 콘솔 프로그램으로 실행하지만 11 행 후 [공백을 포함은, 그것은 단지 과거의 모든 것을 생략하고 Enter 키를 말한다 계속하려면 ENTER를 누르십시오. 내가 도대체 ​​뭘 잘못하고있는 겁니까.

+0

'char yes = 'y';'이면'yes'는 항상'true'입니다. 나는이 부분이 아직 구현되지 않았다고 가정한다. – irrelephant

+0

gcc 4.6.3에서 정상적으로 작동하고 잘 작동합니다. 실행할 코드를 표시하고 있습니까? – juanchopanza

+0

cin >> empname 다음에 fflush (stdin)을 시도해 볼 수 있습니까? 선. –

답변

7

이 항목은 '계속하려면 Enter 키를 누릅니다'라고 가정합니다. 코드는 사용자 환경 (일괄 스크립트, 편집기 등)에 있으므로이 부분은 사용자 환경에 있습니다.

cin (일반적으로 istream)은 줄 바꿈뿐만 아니라 모든 공백으로 입력을 구분합니다. 따라서 cin >> empname은 실제 이름 인 첫 번째 공백까지 직원 이름의 일부만을 실제로 저장합니다. cin.get()은 한 문자 만 가져 오므로 줄 바꿈이 나타날 때까지 기다리지 않습니다.

전체 입력 줄을 가져 오는 대신 std::getline (< 문자열에서 >)을 사용해야합니다.

예 : 당신은 같은 시간에() CIN 및 cin.get로 작업

string empname = ""; 
cout << "Please enter employee name:" << endl; 
getline(cin, empname); 
+0

하지만 외부 헤더 파일의 getline()은 따로 있습니까? 컴파일 할 때 오류가 발생하기 때문에 'std :: basic_istream :: getline()'호출에 일치하는 함수가 없습니다. –

+0

두 개의 getline 함수가 있습니다. [std :: getline] (http://www.cplusplus.com/reference/string/getline/)은 에 있습니다. 문자열 객체를 생성합니다 (아마도 원하는 것입니다). [istream :: getline] (http://www.cplusplus.com/reference/iostream/istream/getline/)은 에 있습니다. C 문자열로 데이터를 읽습니다. 내 대답을 분명히했습니다. – nneonneo

+0

0

. nneoneo가 지적한 바에 따르면 getline을 더 잘 사용하십시오. 그 외에도 포맷 된 입력과 포맷되지 않은 입력을 연속해서 사용할 때마다이 종류의 오류가 발생합니다 (cin은 형식화되어 있고 cin.get 및 getline은 형식이 지정되지 않음). 형식화 된 입력이 스트림에서 공백이나 끝 문자를 제거하기 때문입니다. 그 캐릭터는 스트림에 남고 다음에 포맷되지 않은 입력을 시도하면 그 캐릭터는 스트림과 변수에 들어갑니다.

이 문자가 들어가는 것을 피하려면 형식화되지 않은 입력과 형식화되지 않은 입력 사이에서 cin.clear() 또는 cin.ingore()를 사용할 수 있습니다. 도움이 되길 바랍니다

관련 문제