[Tistory] [C++] 입출력: cin, cout

원글 페이지 : 바로가기

– 맥북으로 vscode에서 c++를 열어보려고 했는데 모종의 이유로 계속 안 열린다. xcode를 쓰기 싫어서 vscode로 설치해보려고 했던건데 맥이나 윈도우나 안열려서 그냥 포기.. 다음에 불편해지면 다시 시도해봐야겠다. https://velog.io/@webb-c/MacOs-VS-code%EC%97%90%EC%84%9C-CC-%EC%8B%A4%ED%96%89-%EB%B0%8F-%EB%94%94%EB%B2%84%EA%B9%85%ED%95%98%EA%B8%B0 이 블로그를 참고해서 세팅을 마쳤다. – https://blog.naver.com/jinhan814/222439906974 이사이트를 이용해서 공부할 건데 1학기에는 자료구조까지 해서 총 17개 게시물을 끝내는 게 목표이다. 방학동안 알고리즘 수업을 복습하면서 6개 게시물을 끝내고 2학기에 나머지를 하면 될 거 같다. #include 를 실행하기 위해 라이브러리->Developer->CommandLineTools->usr->include에 bits 파일을 생성하고 stdc++.h 파일을 넣었다. stdc++.h 0.00MB 입출력 -> 기본적인 세팅 #include #define fastio cin.tie(0)->sync_with_stdio(0) using namespace std; int main() { fastio; } endl과 ‘\n’의 차이 endl은 개행 문자를 출력 버퍼에 기록한 뒤 flush(버퍼를 비움)를 수행하고, ‘\n’은 개행 문자를 출력 버퍼에 기록만 한다. 결론: \n을 사용하자 Escape Sequence ‘\’, ”’, ‘”‘를 문장 중간에 쓰고 싶다면 \\ \’ \” 와 같이 써야 한다 ex) cout<<"minji's book" == cout("minji\s book") 라고 하면 된다. 실수 자릿수 출력 float, double 등의 실수는 cout을 이용해 출력할 때 기본적으로 6개의 유효 숫자를 출력한다. ex) 0.123456789는 0.123457 따라서 fixed 와 setprecision이라는 함수를 쓴다. fixed가 있고 setprecision을 쓰면 실수부 개수대로 출력한다 fixed가 없이 setprecision만 쓰면 정수부+실수부 개수대로 출력한다. 하지만 항상 !!반올림!!해서 출력하는 것을 명심하자 #include 써야 setprecision 쓸 수 있다. double f = 3.1415926535879; cout << setprecision(5) << f << '\n' ; cout << fixed << setprecision(5) << f << '\n'; // output : 3.1416 // output : 3.14159 문자열 중간에 공백 포함 hello world !!! 처럼 중간에 공백인 문자열을 받으려면 getline(cin, s)처럼 쓴다 getline(stream, str, delim) 함수는 stream으로부터 str에 delim이 나오기 전까지의 입력값을 저장해주는 함수이다. hello만 받고 싶다면 string s; cin>>s; 하면 된다. Getline 1. cin.getline() char* 형의 문자열을 받을 경우 사용한다. int main() { char test[10]; cin.getline(test,10); cout << test << endl; return 0; } 하면 0~8까지만 저장이 되고 test[9]에는 '/n'이 들어간다. 2.getline string형을 받을 경우 사용한다. int main() { string test; getline(cin,test); cout << test << endl; return 0; } 3. cin과 getline cin은 hello hi 입력시 띄어쓰기를 구분자로 봐서 hello만 받는데 getline은 \n을 해야 구분자로 봐서 hello hi 모두 받아들이고 \n까지 받아들이고 이후에 /n을 버퍼에서 지운다 결론: cin은 \n을 구분자로 봐도 버퍼를 지우지 않기 때문에 cin 이후에 getline을 쓰려면 cin.ignore()로 버퍼를 지워야 한다. 4. 만약 안 지우면 어떻게 될까? int main() { int num; string str; cin >> num; getline(cin, str); cout << "str: " << str << endl;} num으로 10을 입력한 후 Enter 키를 누르면 개행 문자(\n)가 버퍼에 남아 있어서 그것이 getline()에 의해 문자열로 처리되고 출력된다. 따라서 빈 문자열이 출력된다. cin으로 /n이 남아 있는 상태에서 getline으로 문자열을 받으면 getline이 버퍼에 있는 모든 문자를 지운다. <문자열과 정수> 1. -char*(문자열) -> int(정수) 변환: atoi() 사용 char c[20]=”20″; print(“c*=%s”,c); num=atoi(c); print(“int=%d”,num); 2. -string->char*->int : atoi(s.c_str()) 사용 string s=”2017″; int num=atoi(s.c_str()); printf(“%d”,++num); //2018 출력 cout<<"++num"; //2019 출력 3. -string->int: stoi() 사용 ;;;;;#include 해주기 string s=”2017″ int a=stoi(s); 따라서 stoi(s) = atoi(s.c_str()) // s에 저장된 문자열을 C 스타일의 문자열로 변환->이후 atoi() 적용 하고 s와 a 출력하면 모두 2017이 나온다. 출력 너비 설정 -setw: 다음 출력할 내용의 너비를 n자리로 설정하는 함수 setw로 n자리를 지정해두면 일반적으로 출력할 값이 n자리 미만인 경우는 출력값을 오른쪽에 두고 남은 왼쪽의 빈칸을 채워서 출력하고, n자리 이상인 경우는 그냥 출력값을 그대로 출력한다. 만약 출력값을 왼쪽에 두고 출력하고싶다면 cout << left;를 이용하면 된다. -setfill: setfill은 n자리 중 빈 자리를 채울 문자를 지정하는 함수 <백준> -입력이 들어오는 대로 더해서 sum 출력하기: while(cin>>n) sum+=n; -2 3 4 5로 입력되는 string -> int로 바꿔서 더하기 : if (i < s.size() && s[i] != ' ') t = 10 * t + s[i] - '0' ;c에서 외운 것 처럼

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다