C언어

C언어 배열과 입력함수

5_jinseok12 2018. 1. 5. 00:39
728x90

 

 

배열과 임력함수에 대해 알아보자

 

우선 변수는 문자열을 저장할 수 없고 단일문자만 저장할 수 있다

단일문자에서 여러개의 데이터를 저장하고 싶을때 하나씩 저장해서 이어붙이는 것을 배열이라고 한다. 문자열은 배열로 저장한다.

연관있는 데이터들을 저장할 때 배열을 많이 사용하곤 한다.

배열의 시작은 0부터 이다. 즉 5까지의 배열이 있을 때 0,1,2,3,4,5 이다.

 

 

 

 

 

grade[4]라는 것은 5번째 자리에 있는 배열의 값을 말한다.

 

 

 

index 초과

 

grade[4] 까지 지정했지만 위에처럼 grade[5] 를 나타낼 때

결과값이 나오고 실행은 한다. 하지만 위에처럼 경고창이 나타난다

왜그럴까? 그 이유는 지정된 값은 grade[4] 까지라서 grade[5]는 언제든지 사라질 수 있다는 경고의 메세지인것이다. 이것을 index 초과 라고 한다.

리눅스나 다른 프로그램으로 인해 언제든지 쓰레기값으로 변해서 없어지거나 변형될 수 있으므로 index를 초과하는 일은 없도록 해야한다 

 

 

 

main 함수는  프로젝트 내에서 하나만 존재해야 한다.

소스파일은 여러개 만들 수 있지만 main함수는 하나만 사용한다.

ex1.c 라는 소스파일과 ex2.c라는 소스파일중에 ex2.c라는 소스파일을 사용하고 싶다면 ex1.c의 소스파일에서 void main을 바꿔줘야 한다.

 

 

 

 

위에 사진처럼 소스파일을 다른것을 실행시키고 싶을 땐 void main() 에서 main을 바꿔줘야한다.

 

 

배열의 초기화

문자열을 나타낼 땐 이런식으로 하나씩 출력할 수 있다

하지만 비효율적이라서 잘 사용하지 않는다.

 

굳이 엔터를 쓰지 않고도 이렇게 가로로 한글자씩 출력할 수도 있다

하지만 이또한 비효율적이기 때문에 이런 방법으로는 잘 사용하지 않는다.

 

가장 효율적인 방법은 아래 처럼 한번에 출력하는 것이다.

 

%s 는 문자열을 뜻하는 변환문자이다. 즉 단일문자 말고 문자열을 나타날 때 사용

문자열을 출력하게 되면 마지막에 null 값이 들어간다. 즉 나머지는 쓰레기값으로 취급하기 때문에 출력하지 않는다.

str으로 배열이름을 사용하면 처음부터 null값이 나올 때 까지 출력한다

위에 사진처럼 Hello 라는 값을 나타내려면 5칸을 쓴거같지만 사실상 null이 포함되어 6칸을 사용한것이다.

null값을 나타내는 기호는 \0이다. 왠만하면 자동보정이 되지만 명확한 것은 아니기 때문에 직접 쓰는것을 습관화 해야 한다.

 

 

 

ex)char str[10]={'H','e','l','l','o','\0'};
    char str[] 이런식으로 사용하면 알아서 출력해준다.

char str[index] = " "   이 안에 문자를 넣으면 index 의 수 안에서 출력이 된다

char str[ ]   굳이 [] 안에 숫자를 넣지 않아도 된다, 알아서 출력해주기 때문에. 

[] 안에 들어가는 index는 굳이 입력하지 않아도 되고 크게 써도 상관없지만 작게 쓰면 index 초과 현상이 일어나기 때문에 차라리 안쓰는 게 낫다.

 

 

위에 사진처럼 변수에 값을 지정하면 언제든지 출력할 수 있다

하지만 지정된 값만 출력한다는것이 단점이다. 프로그램을 할 땐 사용자가 입력한 값으로 무엇을 만들던지 실행을 시켜야 하는데 저렇게 고정된 값만 출력할 수 있다면 사실 필요없는것이나 마찬가지다.

아 그리고 하나 알아야 할 것은 위에 "장발장"이라는 것을 출력하기 위해 필요한 byte는 null값을 빼고 6byte이다. 한글은 한글자당 2byte를 차지하기 때문이다

 

사용자가 입력하는 값을 쓰고싶다면 입력함수(scanf)를 사용해야 한다.

scanf를 사용하기 위한 인자(매개변수)는 2개이다.

첫번째는 들어가는 인자는 어떤 데이터 타입의 데이터를 받을지 정하는 '포멧'이다.

두번째는 표준 입력 스트림으로 받은 데이터를 그 포멧으로 저장할 변수이다.

하지만 포인터를 배워야 이해할 수 있으므로 처음에는 그냥 외우는게 좋다.

 

 

&뒤에 변수이름을 쓰면 주소값을 알 수 있다.

그 주소값은 매번 프로그램을 실행할 때 생성되었다가 프로그램이 종료되면 반환하기 때문에 값이 매번 다르게 나온다.

 

 

 

다시 실행했을 때 결과값이 다른것을 알 수 있다.

 

 

scanf를 사용하면 밑에 커서가 생기게 된다. 왜냐하면 입력값을 기다리고 있기 때문이다. fsafsa라는 값을 입력하면 num이라는 주소에 값이 입력되는 것이다

즉 scanf는 사용자가 원하는 입력값을 출력할 수 있도록 도와주는 것이다.

scanf를 사용하기 전에 입력받을 변수를 미리 만들어 놔야 한다.

 

 

입력하라고 커서가 깜빡거린다. 값을 입력하면 그 값이 num1 과 num2에 저장되고 프로그램이 종료된다.

scanf는 순서대로 동작하기 때문에 앞에서 동작하지 않으면 뒤에도 동작하지 않는다.

 

 

 

 

scnaf를 이용한 덧셈.

반응형

'C언어' 카테고리의 다른 글

C언어 if 문  (0) 2018.01.08
C언어 입력함수 scanf  (0) 2018.01.05
C언어 변수와 연산자  (0) 2018.01.03
C언어 변수 선언  (0) 2018.01.02
C언어 제어,변환문자  (0) 2017.12.29