본문으로 바로가기

파일의 IT 블로그

  1. Home
  2. 프로그래밍/C
  3. [C] 변수 여러개 선언, 초기화 할때 주의점

[C] 변수 여러개 선언, 초기화 할때 주의점

· 댓글개 · KRFile

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

 

5596번: 시험 점수

대한고등학교에 재학 중인 민국이와 만세는 4과목(정보, 수학, 과학, 영어)에 대한 시험을 봤습니다. 민국이와 만세가 본 4과목의 점수를 입력하면, 민국이의 총점 S와 만세의 총점 T 중에서 큰

www.acmicpc.net

이 문제인데 값 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;
}

이런 기초적인걸 모르고 살았다니.. 허탈하네요

여러분들은 저같은 실수를 안하시길 바랍니다~~

SNS 공유하기
💬 댓글 개
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.