#include <iostream>
using namespace std;
int main()
{
int year;
char address[80];
cout<<"입주 년도? \n";
cin>>year;
cout<<"사는 도시? \n";
cin.getline(address,80);
cout<<"입주 연도: "<<year<<endl;
cout<<"도시 : "<<address<<endl;
cout<<"등록 완료 \n";
return 0;
}
공부하다가 헷갈리는 부분이 나와서 그런데,
cin 은 빈칸,탭,캐리지리턴같은 화이트페이스가 있으면 문자열이 끝난 것으로 간주하고
getline() 함수는 Enter키에 의해 전달되는 개행문자를 입력의 끝으로 간주한다라고 되어있는데,
이 개념에 의해서 위 소스에서 빨간색부분인 도시입력에서 입력을 받지 못하고 바로 cout구문으로 넘어가버는데요
cin>>year에 의해서 Enter 키가 만들어낸 개행문자를 입력 큐에 남겨두기 때문에 다음 도시입력이 getline 함수에서 입력큐에 남아있던 Enter키가 입력이 돼서
끝나버린거라고 책에 나와있는데여
그렇다면 입력큐에 Enter키가 남아있으면, 저기 cin.getline 구문을 cin>>address로 바꿔버려도 똑같은 결과가 나와야 정상아닙니까?
cin>>address로 바꾸니 정상적으로 파일이 실행되는데요. Enter키도 ㅎ캐리지리턴?이니까 화이트페이스 아닙니까..그래서 연도 입력후에 입력큐에 남아있는
Enter키가 다음 cin>>address에 들어가야한다가 제 판단인데 어딘가 잘못되었나요?..설명좀해주실분?
Indeed, its >>'s fault. The thing is that cin>> reads one word and stops immediately, thus leaving the '\n' from pressing Enter in the stream. This '\n' is then found by getline. It would be good to h
풀어쓰자면 cin이 읽을때 개행을 안들고가니 겟라인이 읽어버림ㅇ 그럼 어드레스 출력때 2칸개행될거 같은데 그건 모르게씀ㅎ
endl쓰면 버퍼비워지는데 왜굳이 개행문자씀
cin은 문자 앞에 오는 공백의 입력을 생략함 - dc App