C언어에서 자료형이 같은 변수를 여러개 선언할땐 콤마(,)로 구분지어 선언합니다.
int a,b;
이것을 0으로 한꺼번에 초기화 할땐 어떻게 해야할까요?
저는 처음에 이런식으로 진행했습니다.
#include <stdio.h>
int main(){
int a, b = 0;
printf("%d %d", a,b);
return 0;
}
이렇게 쓰고 혹시 두개가 초기화가 제대로 안됬을까 a,b도 출력해봤더니 0 0으로 정상 출력되어서 아무런 의심도 하지 않았죠.
이런 생각으로 백준을 푸는데 너무 쉬운문제가 통과를 안하는겁니다..
https://www.acmicpc.net/problem/5596
이 문제인데 값 4개를 2번 입력받고 각각 총합을 구한뒤에 더 큰 총합을 출력하는 간단한 문제인데..
#include <stdio.h>
int main(){
int result1, result2 = 0;
int student1[4]; //민국
int student2[4]; //만세
for (int i = 0; i < 4; i++){
//배열의 이름은 주소이나
//각요소에 입력받을땐 & 기호를 붙여서 접근해야한다.
scanf("%d", &student1[i]);
result1 += student1[i];
}
for (int i = 0; i < 4; i++){
scanf("%d", &student2[i]);
result2 += student2[i];
}
if(result1 > result2){
printf("%d", result1);
} else if(result1 < result2){
printf("%d", result2);
} else{ //동점일땐 민국이의 총점 출력
printf("%d", result1);
}
return 0;
}
코드를 봐도 아무런 이상도 없고 값도 제대로 출력되었습니다. (Dev C++ 기준)
도무지 모르겠어서 질문글도 올리고 했는데 답변으론 result1이 제대로 초기화 되지 않았다고 합니다. 띠용?
이상해서 다음코드를 실행해봤습니다.
#include <stdio.h>
int main(){
int a, b = 100;
printf("%d %d", a,b);
return 0;
}
뭐야.. 진짜 초기화가 안됐잖아?
초기화가 안되면 로컬변수는 기본적으로 쓰레기값(이상한값)을 가지게 되는데 Visual Studio 같은 프로그램은 예전엔 아예 디버깅때 오류를 뱉었던거 같은데 Dev C++은 0이나 1이 나와서 하필이면 0이 나와서 초기화가 됬다고 착각했던 겁니다.
0말고 다른값 넣어볼껄 하필이면 왜 0을 넣었을까요 ㅠㅠ
그래서 아실분들은 아시겠지만 어쨌든 여러개를 초기화할땐 이렇게 써야 합니다
#include <stdio.h>
int main(){
int a = 100, b = 100;
printf("%d %d", a,b);
return 0;
}
이런 기초적인걸 모르고 살았다니.. 허탈하네요
여러분들은 저같은 실수를 안하시길 바랍니다~~
'프로그래밍 > C' 카테고리의 다른 글
[C] 문자열을 다룰 땐 항상 깊은 복사와 얕은 복사를 고려합시다.. (3) | 2022.09.23 |
---|---|
[C] 메모리 관련 함수 memset(), memcpy(), memmove(), memcmp(), memchr() 알아보기 (0) | 2022.09.15 |
[C++] ESP 핵 제작 가이드 (0) | 2021.12.09 |
[C] opendir로 파일 읽을때 유니코드, 한글 경로 읽기 및 파일 타입 체크 방법 (1) | 2021.11.05 |
[C] 피보나치 수열과 메모이제이션 (0) | 2020.01.06 |