개발/C

[C언어] printf, scanf

섭교수 2022. 5. 3. 14:54
반응형

#C언어

1. printf 함수

 

 

C언어에서 문자열을 출력하기 위해 printf 함수를 사용한다.

printf 함수는 줄바꿈이 자동으로 이루어지지 않기 때문에

printf("Hello");

printf("World");

printf("!");

입력시

HelloWorld! 가 출력된다

(1) 줄바꿈 : \n

(2) 미리 지정해둔 변수를 출력하고 싶을 때 : %사용

printf("내용 %d 내용 %f %d", a,b,c") 라 입력하면

첫 번째 %d자리에 a가, %f 자리에 b가, 마지막 %d에 c가 들어간 문자열이 출력된다.

형식지정자
출력양식
%d
정수
%f
실수
%c
문자 하나
%s
문자열

 

(3) Conversion Specifications

: %m.pX 식을 사용해 출력형식을 보다 자세하게 지정할 수 있다.

m은 minimum field width를, p는 X에 따라 의미를 다르게 가지는데 일단은 "보여줄 수의 개수" 라 생각해보자

> 예제 구문

#include <stdio.h>

int a = 123;

int main() {
	printf("%4d",a);

	return 0;
}

 

결과는 아래와 같다.

%4d가 아닌 %10d로 코드를 수정하면 결과는 아래와 같이 여백이 7개임을 알 수 있다.

 

"%4d",a 가 의미하는 것은 "4개의 입력칸에 오른쪽 정렬로 정수a를 넣어서 출력하세요" 이다.

Q1. a의 자리수가 4보다 클 경우( a = 12345)

=> 12345가 출력됨

m 은 minimum field width임을 기억하자

만약 -4와 같이 m 자리에 음수가 들어간다면 "왼쪽정렬"이 된다.

 

 

#include <stdio.h>

int a = 123;

int main() {
	printf("%-5dhello",a);

	return 0;
}

 

 

5칸에 123이 왼쪽정렬되어 출력되었고 그 다음 hello가 출력되었다.

만약 하나의 printf에 여러 개의 변수를 출력하고 싶다면 순서와 형식에 맞게 넣어주면 된다.

.p가 의미하는 것은 뒤에 뭐가 오느냐(d,f,e . . ) 에 따라 다르다.

정수의 경우 보여줄 숫자를 의미하고 실수의 경우 소수점이하 자릿수를 의미한다.

 

 

#include <stdio.h>

int a = 123;

int main() {
	printf("%10.5d",a);

	return 0;
}

 

 

 

#include <stdio.h>

float a = 1.234567;

int main() {
	printf("%10.5f",a);

	return 0;
}

 

 

10칸의 입력공간에 1.234567이 5개의 자릿수로 표현되었다. (자동반올림)

실수형에 대해 e, g를 사용할 수 있는데

%.4e는 exponential 표기를 소수점 넷째자리까지 하라는 의미이고

%.3g는 표현할 방식을 컴퓨터가 적당하게 자동으로 골라서 출력해준다.

 

 

 

 

#include <stdio.h>

float a = 1234563;

int main() {
	printf("%5.3e",a);

	return 0;
}

 

마찬가지로 자동반올림된다.

추가로 \n은 자동 줄바꿈을, \a는 코드 실행시 윈도우 경고음(alert)을 들려주며, \t는 tab을 한 번 누른 효과가 된다.

 

2. Scanf 함수

 

파이썬의 input에 대응하는 함수. 기본 형식은 scanf("%d",&integer); 와 같다.

큰따옴표 안에는 받아들인 입력값을 저장할 자료형을 정하는 것과 입력형식이 들어가며 , 뒤에는 &(변수)가 들어간다.

이때 변수는 미리 지정해두었어야 하며

int a;

scanf("%f, &a);

와 같이 자료형을 다르게 지정하지 않도록 주의해야 한다.

#include <stdio.h>

int a, b, c, d, e;

int main() {
	printf("Enter five numbers following nn/mm,d: ");
	scanf_s("%d%d/%d%d,%d", &a,&b,&c,&d,&e);

	printf("%d", a + b + c * 10 + d / 3 + e % 2);

	return 0;
}

 

 

※ 에러나 경고문구가 뜰 경우 scanf 대신 scanf_s를 사용할 수 있다.

위와 같이 사용자의 입력을 기다리며 깜빡깜빡 거리고 있다.

미리 지정해둔 형식에 맞게 입력하면 정상적으로 코드가 실행됨.

 

예제 : 입력받은 두 분수를 더해 출력하기

 

/*********************************************************
 * From C PROGRAMMING: A MODERN APPROACH, Second Edition *
 * By K. N. King                                         *
 * Copyright (c) 2008, 1996 W. W. Norton & Company, Inc. *
 * All rights reserved.                                  *
 * This program may be freely distributed for class use, *
 * provided that this copyright notice is retained.      *
 *********************************************************/

/* addfrac.c (Chapter 3, page 46) */
/* Adds two fractions */

#include <stdio.h>

int main(void)
{
  int num1, denom1, num2, denom2, result_num, result_denom;

  printf("Enter first fraction: ");
  scanf("%d/%d", &num1, &denom1);

  printf("Enter second fraction: ");
  scanf("%d/%d", &num2, &denom2);

  result_num = num1 * denom2 + num2 * denom1;
  result_denom = denom1 * denom2;
  printf("The sum is %d/%d\n", result_num, result_denom);

  return 0;
}

 

 

 

반응형