|
//인사말을 출력할 차례인지?
if (cols == pad +1 && rows == pad +1) {
이부분의 if 문이 이상한거 같은데요.
저 if 문에 사용된 변수들인 cols, pad, rows 는 if 문이후에는 전혀 변화가 없으므로 계속 같은 결과만 나올거 같군요. 저 비교 문안에 c 변수가 영향을 줘야 if 문의 결과도 변화가 올꺼 같은데...
xylosper 님이 쓰신 글 :
: 지금 책을 보며 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;
: }
|