-
4. 입력정리노트/C언어 정리노트 2025. 1. 20. 16:52반응형
입력 또한 출력 못지않게 프로그래밍에서 핵심적인 기능이다. 많은 프로그램은 입력받은 정보를 가공하여 출력해낸다.
C언어에도 입력이 존재한다.
시작하기 전에
C 프로그래밍에서 주로 사용하는 scanf 함수는 보안 문제로 인해 비주얼 스튜디오에서 사용할 수 없게 막혀 있다. 그래서 일반적으로는 프로그램이 실행되지 않고 버그를 내뿜으며 멈춰 버린다. 그렇기 때문에 우리는 이 문제를 먼저 해결해야 한다.
#include <stdio.h> int main() { int a; scanf("%d", &a); printf("%d", a); return 0; }
오류 발생 예시 위와 같이, 아무런 설정도 바꾸지 않는다면 scanf 함수는 안전하지 않다는 내용을 보여 준다. 이 문제의 해결 방법은 여러 가지가 있다.
1. scanf_s 사용하기
scanf 대신에 scanf_s를 사용하는 방법이 있다. 이는 scanf에서 보안을 향상시킨 것이다.
#include <stdio.h> int main() { int a; scanf_s("%d", &a); printf("%d", a); return 0; } // input : 3 // output : 3
위와 같이 코드를 짜면 정상적으로 작동하는 것을 알 수 있다. 단, 비주얼 스튜디오 이외의 환경에서는 작동하지 않는다.
2. CRT_SECURE_NO_WARNINGS 사용하기
한 파일 내에서 보안 설정을 해제하는 방법도 있다. 이 경우에는 프로그램 제일 앞에 #define _CRT_SECURE_NO_WARNINGS 를 추가하고, scanf를 그대로 사용하면 된다.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int a; scanf("%d", &a); printf("%d", a); return 0; } // input : 3 // output : 3
위와 같이 코드를 짜면 정상적으로 작동하게 된다.
3. sdl 검사 해제하기 (추천하지 않음)
위험한 방법이니, 위의 두 방법을 사용하는 것이 좋다.
위와 같이 소스 코드의 속성 - 일반에서 예(/sdl)로 설정된 SDL 검사를 아니오(/sdl-)로 변경하면 끝이다.
그 뒤로는 scanf를 원하는 대로 사용할 수 있다.
scanf 사용하기
입력에 가장 많이 사용되는 함수는 scanf 함수이다. scanf는 사용자에게서 값을 입력받아, 원하는 변수에 값을 넣어 주는 역할을 한다. scanf 함수의 사용 방법은 다음과 같다.
scanf(<입력 형식>, <변수의 주소>)
예를 들어, scanf("%d", &a); 라는 코드는 입력받은 정수(%d) 한 개를 a라는 변수에 저장(&a)한다는 뜻을 가지고 있다. 여기서 &(앰퍼샌드) <변수명>은 변수의 메모리 주소를 뜻한다.
예시
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int a; scanf("%d", &a); printf("%d", a); return 0; } // input : 3 // output : 3
위에서 본 코드와 같은 코드이다.
scanf 함수를 통하여 정수 하나를 입력받아, 변수 a에 저장한다.
그 후 변수 a를 printf 함수를 통하여 출력한다.
정수 여러 개 입력받기
#include <stdio.h> int main() { int a, b; scanf("%d %d", &a, &b); printf("%d %d", a, b); return 0; } // input : 1 2 // output : 1 2
띄어쓰기로 구분하여 두 개의 정수를 입력받았다. 위와 같이 %d 등의 형식 문자를 입력 형식에 맞추어 주면, 여러 개의 변수를 입력받는 것도 가능하다.
정수 이외의 입력 받기
형식 문자를 바꾸는 것으로 정수 이외의 다른 입력도 받을 수 있다. 예를 들어서 실수나 문자 같은 것들이 있다.
#include <stdio.h> int main() { double a; char b; scanf("%lf %c", &a, &b); printf("%.1lf %c", a, b); return 0; } // input : 1.5 a // output : 1.5 a
%f는 실수, %lf는 double 형식을 입력받을 때 사용한다. %c는 character, 즉 문자 하나를 뜻한다.
입력으로 1.5 a 라는 값을 주었고, 두 값은 각각 변수 a와 b에 대입되었다. 그리고 a와 b를 출력하면서 프로그램 종료.
%.1lf를 사용하였기 때문에 1.5로 출력된 것이다. 기본적인 %lf를 사용한다면 1.500000으로 출력된다.
예시 문제 - 백준 1000번
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)
출력
첫째 줄에 A+B를 출력한다.
예제 입력
1 2
예제 출력
3
두 정수를 입력받아 더해야 한다. 두 정수를 변수에 각각 대입하고, 두 변수를 더하는 방법으로 문제를 풀면 되겠다.
#include <stdio.h> int main() { int a, b; scanf("%d %d", &a, &b); printf("%d", a + b); return 0; } // input : 1 2 // output : 3
두 정수를 입력받아 미리 선언해 둔 변수 a와 b에 저장한다.
a와 b를 더한 값을 출력하면 문제가 해결된다.
반응형'정리노트 > C언어 정리노트' 카테고리의 다른 글
3. 출력 (0) 2025.01.16 2. C언어 코드의 기본적 구조 (0) 2025.01.15 1. C언어 시작하기 (0) 2025.01.15 0. 비주얼 스튜디오 설치하기 (VS2022) (0) 2025.01.15