방명록
- c언어 scanf 함수 주의점. 문자 하나를 받을 경우2022년 03월 06일 22시 32분 04초에 업로드 된 글입니다.작성자: sooooong_minseok
double a = 0; double b = 0; char c; scanf("%lf", &a); scanf("%lf", &b); scanf(" %c", &c); printf("%.2lf\n", a); printf("%.2lf\n", b); printf("%c\n", c);
위 함수를 자세히 보면
scanf(" %c", &c);의 형태이다.
%c앞에 공백이 있는 것을 볼 수 있다.
이 점을 유의해야 한다.
일반적인 자료형의 경우에는 이전에 입력된 엔터나 공백문자, 탭 등을 입력구분자로 처리하여 무시한다.
그러나 문자형 자료char의 경우에는 모든 문자를 입력으로 처리한다.
만약 공백을 생략하면 위에 b의 값을 입력받은 후 누른 엔터가 버퍼에 저장되어 있다가 위의 입력명령을 만나면 c에 저장되어 엉뚱한 결과가 출력될 수 있다.
출처 - 혼자서도 쉽게 익힐 수 있는 자기 주도 c언어 프로그래밍.
문자'열'을 출력할 때는 조금 다르다.
문자열을 공간을 설정할 필요가 있다.
double a = 0; double b = 0; char c[256]; scanf("%lf", &a); scanf("%lf", &b); scanf_s("%s", &c, sizeof(c)); printf("%.2lf\n", a); printf("%.2lf\n", b); printf("%s\n", c);
문자열 [256] char의 크기를 적고,
scanf함수에는 사이즈는 정해준다.
scanf함수를 sdl검사해제나 _CRT_SECURE_NO_WARNINGS를 정의했다면 사이즈를 정할 필요는 없는 것 같다.(추측)
위와 같은 표현에서는 공백을 굳이 넣을 필요가 없다.
첫 번째 예제 공백을 넣어야 한다는 사실을 기억해두자.
'error report' 카테고리의 다른 글
저장 실패; 권한관련 이슈. (0) 2023.12.19 firebase deploy시 발생한 에러. (0) 2023.10.17 LNK1104, LNK1168 (0) 2022.03.06 c언어 변수 이중 선언시 오류 발생. (0) 2022.03.06 git commit과 vim 실행법. (0) 2022.02.27 다음글이 없습니다.이전글이 없습니다.댓글