c언어 기초

scanf 함수

달달고냥 2017. 3. 20. 14:15


1. scanf 함수



- scanf 함수의 입력 형태 정의

데이터를 입력받는 형태를 지정할 수 있다. 즉 입력 서식을 지정하는 것이다.

예 : "%d %o %x"


-실수 입력에 있어서 주의사항

정밀도 생각!

소수 6자리 이하의 실수 입력 시 %f 사용

소수 6자리를 넘는 실수 입력 시 %e 사용

단! double형 변수를 사용하는 경우에는 서식 문자 %le를 사용


예) 변수 입력 및 출력


#include <stdio.h>


int main()

{

  int Num1,Num2;

  int result;

  printf("첫번째 수를 입력 : ");

  scanf("%d",&Num1);

  printf("두번째 수를 입력 : ");

  scanf("%d",&Num2);  

  result = Num1 + Num2;

  printf("두 수의 합은 %d 입니다.\n“,result);

  return 0;

}





Q1) 학생의 성적을 입력한 뒤 합계와 평균을 구해보세요. 


정수형 변수 3개만 사용하여 코드를 작성

================

 이  름   :   홍  길  동

 ================

 국  어   :   100

 영  어   :   98

 수  학   :   75

 ================

 합  계   :    273

 평  균   :    91.00

 ================



입력 변수 : kor, eng, math


★ 주의 : 평균이 실수로 출력!!! 



문자열의 입력 예와 실행 결과   

 2 :  #include <stdio.h> 

  3 : 

  4 :  main() 

  5 :  { 

  6 :     char name1[30], name2[30];   

  7 :     printf("이름을 입력하세요! ");  

          scanf("%s", name1);           ① 


  8 :     printf(“이름을입력하세요! ");

          scanf("%s", name2);          


  9 :     printf("나의 이름은 %s 입니다.\n", name1); 

  10:    printf("나의 이름은 %s 입니다.\n", name2);                  ② 

  11:  } 






이름을 입력하세요! Hong,Gil-Dongꏮ           

이름을 입력하세요! Hong Gil Dongꏮ 




나의 이름은 Hong,Gil_Dong 입니다.   

나의 이름은 Hong 입니다.   




① scanf() 함수를 통하여 문자형 배열로 문자열을 입력받을 경우에는 변수명 앞에 '&'를 붙이지 않는다. 

   C 언어에서 문자열은 1차원 배열로 취급되며, 배열명은 배열 첫 번째 원소의 주소를 나타낸다. 따라서 7행에서 배열명 "name1"은 "&name1[0]"을 나타내므로, scanf() 함수에서 인수가 배열인 경우에는 배열명 앞에 주소 연산자 '&'를 붙이지 않는다. 자세한 내용은 10, 11장을 참조하기 바란다. 

② 10행의 실행 결과와 같이, 입력되는 문자열 사이에 공백이 있으면 첫 번째 나타나는 공백 이후의 문자열은 무시된다. 그러므로 scanf() 함수로 문자열을 입력할 경우에는, "Hong,Gil-Dong"과 같이 문자열 사이에 공백이 없도록 하여야 원하는 결과를 얻을 수 있을 것이다. 



** scanf도 입력값에 대한 제한을 넣거나 공백입력도 가능하다
scanf 입력형식에 조건을 부여하면 된다!!!!

예1) scanf("%[12345]s",data);  >>> 입력이 4567일 경우 45만 입력됨(%s문자열 입력시 1~5 사이 값이 있는 경우 그 값 출력,%s는 &적지않아도 됌)

예2) scanf("%[^12345]s",data);  >>> 입력이 4567일 경우 67만 입력됨 << ^는 조건 안 이외의 문자열만 입력허용
예3) scanf("%[0-9]s",data);  >>> 입력이 45ab일 경우 45만 입력됨 << 0-9는 0123456789와 같은 의미
예4) scanf("%[^\n]s",data);  >>> 개행문자를 만나기 전까지 입력허용 (공백도 입력이 된다 !!!!!
scanf("%[^\n]s", data);