https://www.acmicpc.net/problem/4740
C
#include <stdio.h>
#include <string.h>
int main()
{
char s[81]="";
while (1)
{
scanf("%[^\n]", s);
if (!strcmp(s, "***")) break;
else
{
for (int i = strlen(s) - 1; i >= 0; i--) printf("%c", s[i]);
printf("\n");
}
getchar();
}
return 0;
}
C++
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char s[81];
while (1)
{
cin.getline(s, 81, '\n');
if (!strcmp(s, "***")) break;
else
{
for (int i = strlen(s) - 1; i >= 0; i--) cout << s[i];
cout << endl;
}
}
return 0;
}
코드 설명
'\n'을 만나면 입력을 종료해야 하므로 c의 경우에는 scanf("%[^\n]", s);과 같은 코드를 작성했고, c++의 경우에는 cin.getline(s, 81, '\n');이라는 코드를 작성했다.
무한루프를 돌면서 문자열을 입력받고, 문자열이 ***일 경우 루프를 탈출하게 하고, 그렇지 않을 경우 문자열을 역순으로 출력했다. 이후 줄바꿈을 해준다.
느낀 점
; 사실 버퍼에 대해서는 잘 알지 못한다. 몇 번 이런 경험이 있어서 자연스럽게 getchar();를 추가해서 문제를 풀곤 했는데 이번 기회에 구글링을 통해서 이유를 알았다. 아직 개념이 부족해서 아래에 적을 내용에 오류가 있을 수도 있는데 오류가 있다면 댓글 달아주세요!
scanf("%[^\n]", s)은 '\n'을 만나기 전까지의 모든 문자열을 버퍼에 저장하라는 뜻이다. 그러면 입력된 '\n'은 입력버퍼에 그대로 남아있는데, 이를 제거하지 않고 다시 scanf("%[^\n]", s)를 실행하니 내가 원하는 결과가 나올 수 없는 것이었다. 그래서 getchar()은 입력버퍼에서 문자 하나를 가져오는 역할을 해서 여기에서는 '\n'을 입력버퍼에서 없앤다!
새롭게 알아가는 내용이 있었던 문제였다.
버퍼 내용 참고 블로그 링크 :
https://omyodevelop.tistory.com/120
'PS (C, C++)' 카테고리의 다른 글
[백준/C & C++] 1308 D-Day (0) | 2023.02.21 |
---|---|
[백준/C & C++] 1018 체스판 다시 칠하기 (0) | 2023.02.17 |
[백준/C & C++] 1935 후위 표기식2 (0) | 2023.02.03 |
[백준/C & C++] 1966 프린터 큐 (2) | 2023.02.02 |
[백준/C & C++] 1439 뒤집기 (0) | 2023.02.01 |