상세 컨텐츠

본문 제목

[C++] printf/scanf/'\n'와 cin/cout/endl의 차이

카테고리 없음

by 별달하현 2023. 7. 18. 12:40

본문

- printf(), scanf(), '\n'

header : <cstdio> or <stdio.h>

  • C에서부터 사용했으며, C++에서도 사용 가능한 함수
  • 입출력시, 입력 혹은 출력 받는 변수의 타입을 미리 지정해주어야되고, 각각이 다른 변수명을 가지고 있어서, 사용에 번거로움이 존재한다.
    왼쪽은 type으로, 이를 이용해, printf("%d %c", 5, 2 ); 등으로 표현함.

출처 :&nbsp;https://eehoeskrap.tistory.com/260

  • printf()의 경우, compiler가 두 개의 차이점을 인식하지 못하고 넘어가게 된다. 하지만 정수를 출력할 때는 문제가 발생하지 않지만, double타입을 출력할 때는 1.0을 넣어줘야하는데, 이를 인식하지 못해, Error가 발생할 것이다.
    즉, Error 발생 위험도가 iostream 소속 기능들보다 더 높다.
printf("%d", 1); // compile : O, Error : X //
printf("&f", 1); // compile : O, Error : O //
  • scanf()의 경우, printf와 같이 ""(문자열)안에 %d 혹은 %f 등을 넣어서 변수를 받지만, 차이점은 변수의 주소를 instance에 넣어야하는 것이다.
int n;

scanf("%d", &n); // O //
scanf("%d", n);  // X //
  • printf(), scanf, '\n' 모두, C에서부터 시작된 것들이기에, C의 stdio buffer에 동기화가 필요없어, iostream 소속 기능들보다 더 빠르다는 장점이 있다.

 


 

- std::cin, std::cout, std:: endl

header : <iostream>

  • C에서 C++로 넘어오면서 사용 가능해진 기능(C에는 없었음).
  • 파일 입출력(filestream), 문자열 입출력(stringstream)등이 표준 입출력과 동일한 인터페이스를 사용해, 기능적으로는 우수하다.
  • compile 과정에서 안 되는 것은 알아차리고 알려주기에, 오류를 잡아내기에 유용하고, printf()와 비교했을 때, type을 미리 지정해주지 않아도 되어서, 편리하다.
     ex) 1을 출력하든, 1.0을 출력하든, 알아서 맞는 함수(int, double)을 호출해준다.
  • C++이 C에 기저를 두고 있기에, C로의 동기화가 필요하다. C의 stdio buffer에 동기화하는 과정에서 딜레이가 발생한다.(printf, scanf, '\n'보다 느리다.)

 

 


 

 

- iostream 소속이 cstdio 소속의 속도를 따라잡기 위해 필요한 코드

#include<iostream>
using namespace std;
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

 

위 코드를 main()함수에 적으면 기존보다 더 빨라진다.

ios_base::sync_with_stdio(false);이라는 코드가 C와 C++ 표준 stream과의 동기화를 끊고, C++ stream이 독립적인 buffer를 사용하게 해, 별도의 동기화 시간 없이 사용 가능해지며, 속도가 향상되는 것이다.

이때 유의할 점은 동기화를 끊었기에, stdio 소속 함수(printf, scanf, getchar)는 사용할 수 없어짐을 명심하자.

 

 

 

참고 자료

https://blog.naver.com/PostView.naver?blogId=view7186&logNo=222083168651&parentCategoryNo=&categoryNo=1&viewDate=&isShowPopularPosts=true&from=search 

 

[C++] cout과 printf의 차이 정리

cout <iostream> C++의 스트림 유형의 객체 출력하려는 값의 자료형을 컴파일러가 검사할 수 있다. ...

blog.naver.com

https://tech-tree.tistory.com/49

 

C 에서의 printf와 C++의 cout의 차이점?

가장 큰 차이라면 cout은 출력하려는 값의 형(type)을 컴파일러가 검사할 수 있는 반면에 printf()는 그렇지 못하다는 것입니다. 따라서 버그가 발생할 확률이 높습니다. 예를 들어 /* C program */#include

tech-tree.tistory.com

https://eehoeskrap.tistory.com/260

 

[C] printf 출력형식 %d %i %u %X %x %o %p %s %c %C %f %e %E %g %G

printf 출력 형식 %d %i %u %X %x %o %p %s %c %C %f %e %E %g %G type (형) : 인수의 형을 지정 d int값을 부호있는 10진수로 출력 i d와 같음 u int값을 부호없는 10진수로 출력 X int값을 부호없는 16진수로 출력 10~15

eehoeskrap.tistory.com

https://ip99202.github.io/posts/%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%86%8D%EB%8F%84-%EC%A4%84%EC%9D%B4%EA%B8%B0/

 

sync_with_stdio(false) cin.tie(NULL) cout.tie(NULL)

C++ 입출력 속도 C++의 cin과 cout은 scanf와 printf보다 속도가 느리다. 출력은 큰 차이는 아니지만 입력같은 경우는 2배 이상의 속도 차이가 난다.

ip99202.github.io