728x90
자바같은 경우는 변수를 스스로 초기화 시키지 않아도 지가 알아서 0으로 초기화 시키기 때문에 상관없지만, c언어에서는 변수 선언과 함께 그 전에 메모리에 있던 아무 의미 없는 쓰레기 값이 딸려 나올 수 있다.
변수 선언 시에 할당 받은 메모리 공간을 그 전에 다른 프로그램에서 사용하고 있었다면, 그 프로그램이 종료되었더라도 실제 메모리에 저장되었던 데이터가 남아 있기 때문에 변수를 초기화 하지 않으면 이런 현상이 발생한다고 한다.
백준 문제를 예로 들면 이와 같다.
https://www.acmicpc.net/problem/1546
[처음 작성한 코드]
#include <stdio.h>
int main(void){
double num, max, sum, input[1000];
scanf("%lf",&num);
for(int i=0; i<num; i++){
scanf("%lf",&input[i]);
if(input[i]>max)
max=input[i];
printf("%d",max); // max값 확인을 위한 코드
}
for(int j=0; j<num; j++){
input[j]=input[j]/max*100;
sum+=input[j];
}
printf("%.2lf\n",sum/num);
return 0;
}
printf("%d",max); 에서는 처음에 입력 받은 과목들의 최고 점수를 출력하도록 한다.
그러나 이 코드를 실행시켜서 입력값으로 60 70 80을 넣으면 max 값이 뜬금없이 4654981616으로 나타나는 것을 확인할 수 있었다.
이러한 쓰레기 값을 방지하기 위해 C에서는 변수를 처음 선언할 때 초기값을 정해줘야 한다.
[수정한 코드]
#include <stdio.h>
int main(void){
double num=0, max=0, sum=0; // 수정
double input[1000];
scanf("%lf",&num);
for(int i=0; i<num; i++){
scanf("%lf",&input[i]);
if(input[i]>max)
max=input[i];
}
for(int j=0; j<num; j++){
input[j]=input[j]/max*100;
sum+=input[j];
}
printf("%.2lf\n",sum/num);
return 0;
}
정상적으로 값이 나타난다.
728x90
'C언어' 카테고리의 다른 글
[C언어] 백준 2798 : 블랙잭 (0) | 2022.01.26 |
---|---|
[C언어] char 배열 선언시 주의사항 (0) | 2022.01.24 |
[C언어] 문자 입출력 함수 getchar(), putchar() (0) | 2022.01.24 |
[C언어] 백준 1157 : 아스키 코드를 이용한 문자형 정수 변환 (0) | 2022.01.20 |
[C언어] : scanf()함수 입력 무시 문제, 버퍼링 (0) | 2022.01.19 |