C++

[강의] 8월 20일 수업정리

k-codestudy 2024. 8. 20. 21:31

오늘은 간단한 예제로 시작을 했다.

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