작성
·
284
0
int main()
{
const char first_char = 'A';
// const char last_char = 'T'; // TOOD: use scanf() / 즉 last_char(마지막글자)를 scanf로 입력받아서 쓸 수 있게 만들어봐
// const int num_rows = last_char - first_char + 1;
int r; // num_rows loop
int c; // character loop
char last_char = 'C';
for (last_char; last_char != 'q'; scanf("%c", &last_char))
{
printf("Input last_char (quit to q) : ");
scanf("%c", &last_char);
const int num_rows = last_char - first_char + 1;
for (r = 0; r < num_rows; ++r)
{
for (c = first_char; c <= first_char + r; ++c) //
{
printf("%c ", c);
}
printf("\n");
}
for (r = 0; r < num_rows; ++r)
{
for (c = first_char + r; c != first_char + num_rows; ++c)
{
printf("%c ", c);
}
printf("\n");
}
printf("num_rows : %d, r : %d, first_char : %c, last_char : %c, c : %c\n", num_rows, r, first_char, last_char, c);
printf("\n");
}
입력 받는건 아주 잘 받는데 q 입력했을 때 바로 안나오고 엄청난 이상한 출력 길게 나오고 끝나네요.. 뭐가 문젠가요?
출력은 예제2번에 예제3번 합쳐서 나오고 끝나는 출력입니다.
ex)
A
AB
ABC
BC
C
답변 1
0
안녕하세요 :)
q 를 입력했을 떄 종료하게 하고 싶다면
이렇게 last_char 를 입력 받았을 때 q 면 break 하는 식을 중간에 넣어주어야 하지 않을까 싶습니다.
이렇게 미리 break 로 빠져 나가야 그 아래 연산들을 실행하지 않으니까요!
q 면 반복하지 않도록 하는 것을 for 문식에 써주셨는데, 입력은 for 문 내부에서 받고 있기 때문에 q 를 입력했더라도 그 아래 부분들이 전부 실행이 한번 될 수 밖에 없기에 그랬던 것입니다. q 가 입력되면 미리 break 되게끔 중간에 제가 체크한 빨간 코드를 끼워넣어 주세요~!
여담으로 소문자 q 를 입력했을 때 저런 출력이 나온 이유는 안쪽 for문에서 출력을 num_rows 번 하시는데 이를 last_char - first_char + 1; 로 설정하셨는데요, first_char 가 'A' 대문자로 설정되어 있기 때문입니다. 소문자는 아스키코드가 대문자보다 더 크니까 .. 예를 들어 소문자 q 의 아스키 코드는 113, A 의 아스키코드는 65 니까 소문자 q 를 입력한 경우에는 num_rows 이 48 이나 되네요! 그래서 저런 출력 결과가 나온거구요! 이런 경우가 발생하지 않게끔 q 입력된게 확인되면 바로 break 되게끔 해주세요