코딩테스트

[백준 10926] Trigraph ignored 에러

리미32 2023. 2. 9. 18:50
728x90

Q10926 문제

준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.

입력

첫째 줄에 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어진다. 아이디는 알파벳 소문자로만 이루어져 있으며, 길이는 50자를 넘지 않는다.

출력

첫째 줄에 준하의 놀람을 출력한다. 놀람은 아이디 뒤에 ??!를 붙여서 나타낸다.


 처음에는 단순하게 string 변수 하나 생성해서 cout으로 출력하려했다. 하지만  warning: trigraph ignored [-Wtrigraphs]  와 같은 에러가 발생했다. 

 

Trigraph 란?

 Trigraph는 '삼중자'라는 뜻으로 컴파일러가 해당 문장 부호 문자로 대체하는 세 문자(두 개의 연속된 물음표로 시작)의 시퀀스이다. 즉, 특정 문자 세개가 나오면 다른 문자 하나로 대체되는 문자를 의미한다. C언어에서 삼중자 시퀀스를 사용하면 C 프로그램을 ISO(International Standards Organization) 고정 코드 집합만을 사용하여 쓸 수 있다. 따라서, C언어에서는 삼중자가 세개의 문자를 이용해서 다른 특수 문자를 표현할 수 있었기 때문에 편리한 기능이었다. 하지만 C++에 와서는 삼중자가 필요없어졌다. 그래서 삼중자를 C++에서 사용하면 Trigraph ignored라는 에러가 발생한다.

삼중자 예시


 위의 표를 보면 우리가 쓰려고했던 ??! 는 C언어에서 | 로 대체된다는것을 알 수 있다.

 

해결방법

삼중자를 방지하기 위해서 삼중자 중간에 ' \ ' 를 붙여줘야한다. 

#include <iostream>
#include <string>


using namespace std;

int main(){
    
    string name;

    cin>>name;

    cout<<name<<"?\?!"<<endl;

}

 

 

728x90