2011-02-26 4 views
0

방금 ​​C++에서 시작했고 필자가 알아 내지 못하는 연습 문제에서 문제가 발생했습니다. 나는의 형태로 콘솔에서 라인을 읽을 수 있어야합니다 : N은 숫자, 다음과 같은 입력입니다''(공백) 문자 뒤에 입력 종료

N A B C... etc. 

는 N이 무엇인지에 따라 서로 다른 유형과 다른 금액이 될 것입니다.

내 접근 방식은 N을 읽고 N이 무엇인지에 따라 다른 입력을 요청하는 것입니다. 하지만 모든 입력을 한 줄로 받아 들여야하고 단일 공백 ​​문자 뒤에 어떤 형식의 입력도 끝낼 수 없었습니다. 어쨌든 하나의 숫자와 공백 문자를받은 후 다음 문장으로 이동할 수 있습니까? 아니면이 문제를 해결할 더 좋은 방법이 있습니까? 고마워요.

편집 :

좋아 내가 그것을 알아 냈어요 생각하지만 난 그것을 이해 완전히하지 않는, 그래서 istringstream에보고해야합니다. 여기에 내가 가진 것이있다.

vector<string> words; 

string token, text; 
getline(cin, text); 

istringstream iss(text); 

while (getline(iss, token, ' ')) { 

    words.push_back(token); 

} 

이렇게하는 것이 좋은 방법입니까, 아니면 다른 방법을 사용해야합니까? 그리고 누구든지 할 수 있다면,이 라인들을 설명해 주시겠습니까?

while (getline(iss, token, ' ')) 

이전의 모든 문자로 토큰을 채우면서 공간에 도달하면 true를 반환합니다.

그리고이 하나가 나를 혼란스럽게합니다.

getline(cin, text); 

답변

1

코드를 한 번에 (요청에 따라) 읽은 다음 N에 따라 나머지 입력을 검사하여 형식이 올바른지 확인하거나 오류를 인쇄해야합니다.

+0

그러나 어떻게 getline()과 문자열 유형이나 다른 것을 사용하지 않고도 다양한 입력 행을 읽었을까요? – Kzone272

+0

전체 줄에서 (입력 한 입력 수에 대한 지식없이) 읽은 다음 첫 번째 토큰 (또는 N)을 읽는 공백 문자를 토큰화할 수 있습니다. N이 무엇인지 파악한 후에 나머지 예상 토큰을 읽을 수 있습니다. 잘못된 입력을 확인하는 방법은 귀하에게 달려 있습니다. –

+0

좋아, 알았어. 감사! – Kzone272

3

표현 cin >> nn 숫자 형 또는 문자열 유형인지, 최초의 우주에 중지됩니다. 나는 %d 또는 비슷한 형식의 순서 뒤에 공백이있는 한 scanf이 같은 것을 할 것이라고 믿습니다.

+0

아마도 이것을 테스트하는 것을 잊어 버렸을 지 모르지만이 코드는 return을 두드리지 않고 다음 줄로 이동할 것입니까? 나는이 순간 자신을 시험 할 수 없다. – Kzone272

+0

@ Kzone272 - 당신이 return을 치기 전까지는 블록 될 것입니다,하지만'n'에 대한 첫 번째 토큰 만받습니다. 나머지 줄은 나중에 입력 할 수 있도록 버퍼링됩니다. – aaz

관련 문제