|
지금 책을 보며 C++을 공부중인데...책이랑 똑같이 코딩 했는데 결과가 이상해서 질문드립니다.
이름을 입력받아서 테두리를 달아서 출력하는 프로그램입니다.
컴파일링도 에러없이 되는데, 문제는 결과물이 이상하다는 것입니다.
일단 이름 입력받는 곳은 정상으로 나오고, 이름을 입력하면, 테두리 속에 이름이 들어간 헬로메시지가 나와야되는데, 메시지가 안나옵니다.
혹시나해서 이름 길이를 조절해보니, 그에따라서 테두리도 같이 늘어나는 걸로 봐서 출력 부분에는 문제가 없는것 같고...
greeting의 정의가 잘못된거 아닌가 하는 생각도 들지만, 어디가 잘못된건지도 모르겠고, 제가보기엔 제 코딩과 책에 써있는 코딩이 똑같이 보여서...어디가 잘못된것인지 알려주시면 감사하겠습니다.
#include <iostream>
#include <string>
// 어떤 표준 라이브러리를 사용하는지 알림
using std::cin; using std::cout;
using std::string; using std::endl;
int main()
{
//이름을 물어봄
cout << "please enter your name: ";
//이름을 읽어들임
string name;
cin >> name;
//출력할 메시지를 구성
const string greeting = "Hello, " + name + "!";
//인사말 주위의 빈칸 개수
const int pad = 1;
//출력할 행과 열의 개수
const int rows = 2 * pad + 3;
const int cols = 2 * pad + 2 + greeting.size();
//입력과 출력을 구분하기 위한 빈칸 삽입
cout << endl;
//rows 만큼의 행 출력
//불변식 : 지금까지 r개의 행을 출력함
for (int r = 0; r != rows; ++r) {
string::size_type c = 0;
//불변식 : 지금까지 c개의 열을 출력함
while ( c != cols) {
//인사말을 출력할 차례인지?
if (cols == pad +1 && rows == pad +1) {
cout << greeting;
c += greeting.size();
} else {
//경계에 있는지?
if (r == 0 || c == 0 || r == rows -1 || c == cols -1)
cout << "*";
else
cout << " ";
++c;
}
}
cout << endl;
}
return 0;
}
|