[C] 배열 - Kyeom

2022. 11. 18. 21:45C언어/기본 개념

728x90

배열

같은형태의 많은 데이터를 반복문으로 처리하기 위해서 메모리에 연속적으로 저장해놓고 쪼개서 사용하는 방법

int ary[5];

자료형 int

배열명 ary

요소개수 [5]


정수 배열 초기화

  1. int ary[5] = {1, 2, 3, 4, 5};
  2. int ary2[1000] = {0};
  3. int ary3[] = {1, 2, 3};

1번처럼 하나씩 지정할 수도 있고

2번처럼 0으로 초기화 할 수도 있다.

3번처럼 요소 개수를 생략도 가능하다.


반복문을 활용한 배열

#include <stdio.h>

int main(void)
{
	int score[5];
	int i;
	int total = 0;
	double avg;

	for (i = 0; i < 5; i++)			//score 배열의 각 값을 저장한다.
	{
		scanf("%d", &score[i]);
	}

	for (i = 0; i < 5; i++)			// 배열의 합을 구한다.
	{
		total += score[i];
	}
	avg = total / 5.0;

	for (i = 0; i < 5; i++)			// 내가 입력한 수가 어떤 수인지 출력한다.
	{
		printf("%5d", score[i]);
	}
	printf("\n");
	printf("평균 : %.1lf\n", avg);


	return 0;
}

문자를 저장하는 배열

char형 배열을 선언 할 때는 저장할 문자열의 길이보다 하나 이상 크게 선언해야한다.(최대한 넉넉하게 선언 해야 좋다)

(ex. 'phone'을 저장하고 싶을 때는 배열을 최소 6개 이상 선언해야한다. //  char str[80] = "phone";)

★ 만약 초기화 되지 않은 상태에서 배열 요소를 직접 대입한다면 마지막 문자 다음에는 널 문자('\0')를 대입해줘야한다!

char str[80];
str[0] = 'a';
str[1] = 'b';
str[2] = '\0';        //널 문자

strcpy

strcpy는 char형 배열에 새로운 문자열을 저장(대입)하는 함수다.

이때 #include <string.h> 헤더 파일을 작성해야한다(문자열 관련 함수 원형을 모아놓은 헤더 파일이다.)

strcpy(저장될 변수명, 저장할 변수명);
#include <stdio.h>
#include <string.h>

int main(void)
{
	char str1[80] = "cat";
	char str2[80];
	
	strcpy(str1, "tiger");
	strcpy(str2, str1);
	printf("%s, %s \n", str1, str2);

	return 0;
}
결과값 >>>
tiger, tiger

gets, puts

gets(char형 배열명);  :  scanf와 달리 빈칸과 탭 문자를 사용 할 수 있다. enter를 누르기 전까지를 하나의 문자열로 저장.

puts(char형 배열명) : puts는 printf함수의 문자열 출력 기능과 비슷하다.

#include <stdio.h>
#include <string.h>
int main(void)
{
	char str[80];

	printf("문자열 입력 : ");
	gets(str);
	puts("입력된 문자열 : ");
	puts(str);
    
	return 0;
}
문자열 입력 : good morning (enter)
입력된 문자열 :
good morning

gets의 단점

배열의 크기를 인지하지 못하기 때문에 배열의 크기보다 더 큰 값을 넣게 됐을 때 나머지는 버퍼에 남아 있으므로 위험하다.


fgets

char str[20]
fgets(str, sizeof(str), stdin);

위에 gets 함수의 단점을 보완한 함수이다.

만약 선언 된 배열(20)보다 더 길게 작성한 경우에는 19바이트만 입력하고 '\n'개행문자를 넣고 끝낸다. 

단 fgets함수는 기본적으로 '\n'넣고 마지막에 널 문자('\0')를 집어 넣는다. 그렇기 때문에 출력했을 때 자동으로 줄 바꿈이 된다.

이걸 방지 하기 위해서

fgets(str, sizeof(str), stdin);

str[strlen(str) - 1] = '\0';  //마지막 문자를 개행문자로 바꿔준다.

printf("%s", str);

728x90

'C언어 > 기본 개념' 카테고리의 다른 글

[C] 배열과 포인터  (0) 2022.11.24
[C] 포인터  (0) 2022.11.21
[C] 함수-Kyeom  (0) 2022.11.17
[C] 반복문(break, continue) - Kyeom  (0) 2022.11.17
[C] if문 / switch ~ case문  (0) 2022.11.16