본문 바로가기
관/솔직한 c 언어 공부

c언어 기초 공부 03.

by 4차원 박스 2019. 11. 4.

입력을 받는함수

scanf();사용하기
파이썬의 input과 비슷한 함수로 생각한다.

(간단한 차이점을 적자면 파이썬의 input의 기능 == c언어의 printf + scanf의 기능 이다)

복습잠깐

printf 의 서식문자에서 바로 초기화하는 방법과
변수라는 그릇에 담에서 printf에서 선언하는 방식이 있었다.



오늘은 scanf에 대하여 알아본다.

scanf("%d",&어쩌구);

여기서 &라는거는 주소의 개념으로
포인터와 연관되어 있다.

다음은 스캔에프를 이용하여 간단한 평균을 구하는 코드이다
int main()
{
int x,y,z;
int sum;
float avr;

printf("x값 : \n");
scanf("%d",&x);

printf("y값 : \n");
scanf("%d",&y);

printf("z값 : \n");
scanf("%d",&z);

sum=x+y+z;
avr=sum/3;

printf("합은 %d이다 \n",sum);
printf("평균은 %f이다 \n",avr);

return 0;
}

결과로
x값 :
1
y값 :
2
z값 :
3
합은 6이다
평균은 2.000000이다
계속하려면 아무 키나 누르십시오 . . .

요래된다.


만약 \n을 스캔에프 와 있는 프린트에프에서 빼면
int main()
{
int x,y,z;
int sum;
float avr;

printf("x값 : ");
scanf("%d",&x);

printf("y값 : ");
scanf("%d",&y);

printf("z값 : ");
scanf("%d",&z);

sum=x+y+z;
avr=sum/3;

printf("합은 %d이다 \n",sum);
printf("평균은 %f이다 \n",avr);

return 0;
}

x값 : 1
y값 : 2
z값 : 3
합은 6이다
평균은 2.000000이다
계속하려면 아무 키나 누르십시오 . . .

요래 출력된다.

scanf 에서는 값을 입력받고 엔터를 치면 다음단계로 넘어가므로
줄바꿈은 자동적으로 이루어진다.





다음은 원과 과련된 코드이다

int main()
{
double r;
double l;
double s;
printf("반지름 입력 : ");
scanf("%lf",&r);

l=3.14*2*r;
s=3.14*r*r;

printf("둘레길이는 %lf \n",l);
printf("넓이는 %lf \n", s);
return 0;
}

결과는 

반지름 입력 : 5
둘레길이는 31.400000
넓이는 78.500000
계속하려면 아무 키나 누르십시오 . . .

요래 나온다.


다음은 팀프로젝트로 몇단을 출력할지 입력받고 출력하는
코드이다

int main()
{
int g;
printf("몇단 출력할래? : ");
scanf("%d",&g);

printf("%d 단을 출력 \n",g);
printf("%dx1=%d \n",g,g*1);
printf("%dx2=%d \n",g,g*2);
printf("%dx3=%d \n",g,g*3);
printf("%dx4=%d \n",g,g*4);
printf("%dx5=%d \n",g,g*5);
printf("%dx6=%d \n",g,g*6);
printf("%dx7=%d \n",g,g*7);
printf("%dx8=%d \n",g,g*8);
printf("%dx9=%d \n",g,g*9);

return 0;
}

결과는 다음과 같다

몇단 출력할래? : 5
5 단을 출력
5x1=5
5x2=10
5x3=15
5x4=20
5x5=25
5x6=30
5x7=35
5x8=40
5x9=45
계속하려면 아무 키나 누르십시오 . . .



이번엔 스캔에프로 문자를 넣는 방법이다.
char 을 사용한다%c 로 스캔에프에 쓴다.

스페이스바 또한 문자로 취급한다 이를 방지하기 위한
간단한 팁으로는 "%c" 가 아닌 " %c" 즉 서식문자 앞에
스페이스를 사용해주면 방지할 수 있다.

char 으로 선언된 변수에 숫자를 집어넣어서 초기화를 시키면
아스키코드 표를 반영하여 출력된다 예로 다음 두개는 같다.

char a;
a='A';
a=65;

다음 예제로 본다

int main()
{
char code='A';
char code1=65;
printf("%c \n",code);
printf("%c \n",code1);
printf("\n");
return 0;
}

결과는
A
A

이다.


자료형의 크기를 파악하는 함수는
sizeof 함수를 사용한다
sizeof(int) 이렇게 사용함

다음과 같다
int main()
{
printf("int크기%d 바이트 \n",sizeof(int));
printf("double크기%d 바이트 \n",sizeof(double));
printf("float크기%d 바이트 \n",sizeof(float));
printf("char크기%d 바이트 \n",sizeof(char));
return 0;
}

결과로
int크기4 바이트
double크기8 바이트
float크기4 바이트
char크기1 바이트
가 나오고 

변수의 자료형을 선언할때 그 크기를 조절하고 싶을때
만약 음수의 범위가 필요없다면 nusigned를 앞에 붙이고 자료형을 사용한다.
대신 음수의 범위만큼 양수의 범위가 늘어난다.


다음은 간단한 예제이다

문자를입력 받아 변수에 저장하고 다시 출력하는 코드이다.
int main()
{
char code;

printf("문자하나 받아라 : ");
scanf("%c", &code);
printf("받은문자 출력해봐라 : %c \n",code);
printf("\n");
return 0;
}
결과로

문자하나 받아라 : a
받은문자 출력해봐라 : a
가 나온다.


다음은 간단한 형변환이다
그릇이 작은것에 큰것을 담을때 저절로 버리는 부분이 있다 (실수를 담아서 정수로 바꿀때 실수부를 버린다.)


int main()
{
int i;
float f;

f=3.14;
i=f;
printf("%d \n",i);
printf("\n");
return 0;
}

이 결과로
3
가 나온다.






다음도 간단한 예제이다

int main()
{
unsigned int l;
unsigned int r;
float t;

printf("빛의 속도 : ");
scanf("%d km/s",&l);

printf("태양과 지구의 거리 : ");
scanf("%d km",&r);

t=r/l;

printf("빛이 태양에서 지구로오는데 걸리는 시간 : %f sec \n",t);
printf("\n");
return 0;
}

이 결과로
빛의 속도 : 300000km
태양과 지구의 거리 : 149600000km
빛이 태양에서 지구로오는데 걸리는 시간 : 498.000000 sec

가 나오는데 신기한건 명령창에 단위도 쳐야 다음으로 넘어간다는 것이다.

다음은 좀더 숫자를 보완한 코드이다

int main()
{
float l;
float r;
float t;

printf("빛의 속도 : ");
scanf("%f km/s",&l);

printf("태양과 지구의 거리 : ");
scanf("%f km",&r);

t=r/l;

printf("빛이 태양에서 지구로오는데 걸리는 시간 : %.5f sec \n",t);
printf("\n");
return 0;
}

결과로 

빛의 속도 : 300000km/s
태양과 지구의 거리 : 149600000km
빛이 태양에서 지구로오는데 걸리는 시간 : 498.66666 sec

와 같이 나온다.


빛이 1년간 가는거리는?

double a;
a=l*60*60*24*365;
printf("빛이 1년간 가는거리 : %lf km \n",a);

이 코드를 위에 추가해주면 
빛이 1년간 가는거리 : 9460800000000.000000 km 
이와 같이 나온다. 


실수형에서 자릿수 제한하는 방법
%f 
%.5f 이건 소수5자리까지 나오게하며
printf 에서만 사용하자 scanf에서는 사용하면 오류가난다

왜냐하면 출력할 값을 정제하여 출력하는 과정이기 때문에
넣지도 않은 값에서는 넣으면 오류가 난다.

' > 솔직한 c 언어 공부' 카테고리의 다른 글

c언어 기초 공부 06.  (0) 2019.11.06
c언어 기초 공부 05.  (0) 2019.11.05
c언어 기초 공부 04.  (0) 2019.11.04
c언어 기초 공부 02.  (0) 2019.11.03
c언어 기초 공부 01.  (0) 2019.11.02

댓글