오늘은 간단한 예제로 시작을 했다.
1. 조건문과 중괄호 {} 사용의 중요성
- 조건문 예시:
#include <iostream>
int main() {
int nData{};
nData = 5;
if (nData < 10)
printf("참\n"); printf("테스트\n");
}
- 위 코드에서는 if 조건이 참일 경우 "참"과 "테스트"가 출력되지만, 조건이 거짓일 경우 "테스트"만 출력된다.
- 이유는 printf("테스트\n");가 중괄호 {}로 묶여 있지 않아 if문과는 무관하게 항상 실행되기 때문이다.
- 해결 방법: 중괄호 사용
#include <iostream>
int main() {
int nData{};
nData = 5;
if (nData < 10){
printf("참\n");
printf("테스트\n");
}
}
- 이렇게 중괄호로 코드를 묶으면 if 조건이 참일 때만 두 문장이 모두 실행된다.
- 잘못된 중괄호 사용은 논리적인 오류를 유발할 수 있으므로 주의가 필요하다.
2. scanf와 scanf_s 사용
- 기본 사용법:
scanf("%d", &nData);
- scanf는 형식화된 데이터를 읽어와 변수에 저장한다.
- % d는 정수를 입력받는 형식이며, &nData는 입력받은 값을 저장할 변수의 주소이다.
- scanf의 문제점:
- scanf를 사용하면 보안 경고가 발생할 수 있습니다. (예: error C4996: 'scanf': This function or variable may be unsafe.)
- 이러한 문제를 해결하기 위해 scanf_s를 사용해야 한다.
- scanf_s 사용법:
scanf_s("%d", &nData);
- scanf_s는 scanf와 동일한 기능을 하지만 보안을 강화한 함수
3. scanf_s 사용 시 주의사항
- 주소 연산자(&) 사용:
scanf_s("%d", nData);
- & 연산자를 사용하지 않으면 변수의 주소를 전달하지 않아 잘못된 동작을 하거나 프로그램이 충돌할 수 있다.
- 정수를 입력받을 때는 반드시 & 연산자를 사용해야 한다.
- 줄 바꿈(\n) 추가 시 문제:
scanf_s("%d\n", &nData);
- \n을 추가하면 공백 문자를 무시하지 않아서 입력 후 줄 바꿈이 발생하고,
이후 입력 시 예상치 못한 동작이 일어날 수 있다.
- 버그를 방지하기 위해 형식 문자열에 \n을 추가하지 않도록 주의해야 한다.
- 이와 같은 방식으로 조건문과 scanf 계열 함수를 사용할 때 주의사항을 염두에 두면 논리적 오류를 방지할 수 있다.
4. 문제 해결을 위한 변수 활용
수업을 진행하면서 한가지 문제를 내주셨다.
첫 번째, 두 개의 int형 데이터를 입력받아 작은 수를 출력하시오
두 번째, 기존 프로그램에 int형 데이터를 하나 더 추가하고 작은 수를 출력하시오
3번째, 하나 더 추가해서 실행해볼것
또한 1 -> 2 -> 3 순으로 진행을 하는 것인데 단 현재까지 배운것으로만 코드를 작성해야한다.
첫 번째는 어찌어찌 만들어보았다.
#include <iostream>
int main() {
int nData1{};
int nData2{};
scanf_s("%d", &nData1);
scanf_s("%d", &nData2);
if (nData1 < nData2)
printf("%d", nData1);
if (nData1 > nData2)
printf("%d", nData2);
}
- if 문을 사용하여 두 값을 비교하고 작은 값을 출력합니다.
하지만 2번째부터는 풀지 못하였다.
현재 코드에 int형 데이터를 하나 더 추가하여 작은 수를 출력하기에는 불가능해 보였다.
이후 시간이 지나고 강사님의 코드를 짠 후 내가 아직 생각이 짧다는 생각을 하였다.
#include <iostream>
int main() {
int nData1{};
int nData2{};
int nData3{};
int nMinimum;
scanf_s("%d", &nData1);
scanf_s("%d", &nData2);
scanf_s("%d", &nData3);
nMinimum = nData1;
if (nMinimum > nData2)
nMinimum = nData2;
if (nMinimum > nData3)
nMinimum = nData3;
printf("%d", nMinimum);
}
-nMinimum이라는 변수를 추가하여, 먼저 nData1 값을 저장
- nData2, nData3와 비교하여 더 작은 값을 nMinimum에 저장하고, 최종적으로 nMinimum 값을 출력
나와의 코드에서 다른 점은 강사님께서는 변수를 하나 더 추가를 하셔서 코딩을 하셨다는 것이다. ( nMinimum )
코드는 역할분담이 필요하다는 것을 알게 되었다. 내가 어떤 변수에 어떤 역할을 주고 만약 역활이 부족하다면 새로운 역활을 하나 만들어 분담을 시켜 코드를 풀어가는 그런 생각이 없었기에 신기했었던 거 같다.
교훈
- 변수 활용의 중요성: 문제를 해결할 때 필요한 변수의 역할을 명확히 정의하고, 그에 따라 새로운 변수를 추가하여 코드를 작성하는 것이 중요하다
- 창의적인 접근: 문제를 해결하는 방법은 여러 가지가 있을 수 있으며, 다양한 사고와 접근 방식을 통해 더 효율적인 코드를 작성할 수 있다
- 안전한 코딩: 임의의 값이나 변수를 사용하는 것보다는, 문제에 맞는 정확한 변수를 정의하고 사용하는 것이 코드의 안전성과 신뢰성을 높이는 방법이다
이와 같은 방법으로 문제를 해결해 나가면서, 각 변수의 역할을 분명히 하고 창의적인 접근 방식을 통해 더 나은 코드를 작성하는 능력을 키울 수 있을 것이다
'C++' 카테고리의 다른 글
| [강의] 8월 22일 수업정리 (0) | 2024.08.22 |
|---|---|
| [강의] 8월 21일 수업정리 (0) | 2024.08.21 |
| [강의] 8월 19일 수업정리 (0) | 2024.08.19 |
| [강의] 8월 16일 수업정리 (0) | 2024.08.16 |
| [강의] 8월 14일 수업정리 (0) | 2024.08.14 |