검수요청.png검수요청.png

입출력문

위키원
이동: 둘러보기, 검색

입출력문(input-output statement)은 외부 매체 사이의 입출력이나 관련 동작을 하는 문장이다.[1]

개요[편집]

입출력문은 사용자에게 입력을 받거나 촐력할 때 쓰는 명령어이다. 입력문이 있으면 출력문도 같이 쓰게 된다. 출력문보다 입력문이 복잡해 보이지만, 입력한 값은 저장해야 프로그램 내에서 사용 가능하다. 또, 저장할 때는 변수가 필요하다. 그렇게 입력한 값의 성격에 맞는 변수명을 만들어서, 입력한 값을 저장한다. 이후 저장된 값은 변수를 통해서 접근할 수 있다.[2] 또한 컴퓨터 처리 분야에서, 컴퓨터의 5대 기능의 제어, 연산, 입력, 출력, 기억 가운데, 입력과 출력의 기능을 꺼내 입출력이라고 이름 붙인다고 여겨진다. 보통 입력 장치를 이용하고 컴퓨터에 사용자가 데이터, 정보 등을 전달하여 출력 장치를 이용하고, 컴퓨터가 사용자에게 데이터 등을 전달한다. 또, 컴퓨터끼리 정보를 제공하는 통신(컴퓨터 네트워크)도 입출력 기능에 해당한다.[3]

C언어[편집]

C언어에서는 기억장치에 저장되는 파일을 다루는 것과 마찬가지 방식으로 입출력 장치를 다룬다. 따라서 키보드, 모니터와 같은 대부분의 콘솔 장치도 C 프로그램에서는 자동으로 열리는 파일처럼 다뤄진다. C언어에서는 stdin 표준 스트림을 통해 입력 장치를 다루며, stdout 표준 스트림을 통해 출력 장치를 다룬다.[4] C언어의 대표적인 입출력문은 scanfprintf이다. scanf()은 입력, printf()는 출력을 구성한다.

scanf[편집]

scanf() 함수는 C언어의 표준 입력 함수로, 사용자로부터 다양한 데이터를 다양한 서식에 맞춰 입력받을 수 있게 한다. 이 함수는 입력받은 데이터를 어떤 서식으로 변환할지 서식 지정자(format specifier)를 통해 직접 지정할 수 있다. C언어에서 데이터를 입력받으려면 입력받고자 하는 데이터의 타입에 해당하는 크기의 메모리를 우선 할당받아야 한다. 이처럼 데이터를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 변수라고 한다. scanf() 함수에 포함된 '&' 기호는 주소 연산자(&)라고 한다. 이 주소 연산자는 입력받은 데이터를 뒤에 나오는 변수에 저장하라는 의미이다.

#include<stdio.h>

int main()
{
  int a, b;

  printf("입력 : ");
  scanf("%3d%3d", &a, &b);
  printf("%d %d\n", a, b);

  return 0;
}

결과값
123456
123 456[5]
double형 실수 입력

scanf() 함수로 float형 실수를 입력받을 때는 서식 지정자로 '%f'를 사용하면 된다. 하지만 double형 실수를 입력받을 때는 printf() 함수에서처럼 '%f'를 사용하면 안 된다. scanf() 함수로 double형 실수를 입력받을 때는 반드시 '%lf' 서식 지정자를 사용해야 정확한 값으로 입력받을 수 있다. 다음 예제는 사용자로부터 두 개의 실수를 한 번에 입력받아 출력하는 예제이다.

#include <stdio.h>  

int main(void)

{
   float num01;
   double num02;


   printf("두 개의 실수를 입력하세요 : ");
   scanf("%f %f", &num01, &num02);
   printf("입력하신 두 실수는 %f와 %f입니다.\n", num01, num02);
   printf("입력받은 두 실수 중 두 번째 double형 변수에는 전혀 다른 값이 저장되었습니다.\n\n");

 
   printf("다시 한 번 두 개의 실수를 입력하세요 : ");
   scanf("%f %lf", &num01, &num02);
   printf("입력하신 두 실수는 %f와 %f입니다.\n", num01, num02);
   printf("이번에는 두 실수 모두 제대로 저장되었습니다.\n");

   return 0;

}

실행 결과
두 개의 실수를 입력하세요 : 1.2 3.4
입력하신 두 실수는 1.200000와 0.000000입니다.
입력받은 두 실수 중 두 번째 double형 변수에는 전혀 다른 값이 저장되었습니다.

다시 한 번 두 개의 실수를 입력하세요 : 1.2 3.4
입력하신 두 실수는 1.200000와 3.400000입니다.
이번에는 두 실수 모두 제대로 저장되었습니다.[6]

printf[편집]

printf() 함수는 C언어의 표준 출력 함수로, 여러 종류의 데이터를 다양한 서식에 맞춰 출력할 수 있게 한다. printf() 함수의 f는 formatted의 약자이며, 서식화된 출력을 지원한다는 의미이다. scanf와 동일하게 출력할 데이터를 어떤 서식에 맞춰 출력할지 서식 지정자를 통해 직접 지정할 수 있다.[7]

필드폭 지정

필드폭은 %와 형식지정자 사이에 들어가게 되는데, 예를 들어 %5d이면 필드폭이 5인 정수형을 의미한다.

#include<stdio.h>

int main()
{
  printf("%7d     %7d\n", 1, -1);
  printf("%7d     %7d\n", 12, -12);
  printf("%7d     %7d\n", 123, -123);
  printf("%-7d     %-7d\n", 1, -1);
  printf("%-7d     %-7d\n", 12, -12);
  printf("%-7d     %-7d\n", 123, -123);

  return 0;
}

결과 값
      1          -1
     12         -12
    123        -123
1           -1     
12          -12    
123         -123[5]
정밀도

정밀도는 .2와 같이 .기호 뒤에 숫자를 붙여서 표시한다. %e, %E, %f를 쓸 때 사용될 수 있다. 실수를 출력할 때는 소수점 이하의 자릿수의 개수가 정밀도이다.

#include<stdio.h>

int main()
{
  printf("%10.3f\n", 1.23456789);
  printf("%10.4f\n", 1.23456789);
  printf("%10.5f\n", 1.23456789);
  printf("%10.6f\n", 1.23456789);

  printf("%.3f\n", 1.23456789);
  printf("%.4f\n", 1.23456789);
  printf("%.5f\n", 1.23456789);

  return 0;
}

결과값
     1.235
    1.2346
   1.23457
  1.234568
1.235
1.2346
1.23457[5]
다양한 출력 방식

진법 출력이나, 지수 표기법도 가능하다.

#include<stdio.h>

int main()
{
  printf("10진법 : %d\n", 11);
  printf("8진법 : %o\n", 11);
  printf("16진법 : %x\n", 11);


  printf("소수표기 : %f\n", 0.012345);
  printf("지수표기 : %e\n", 0.012345);
  printf("지수표기 : %E\n", 0.012345);

  return 0;
}

결과 값
10진법 : 11
8진법 : 13
16진법 : b
소수표기 : 0.012345
지수표기 : 1.234500e-02
지수표기 : 1.234500E-02[5]

파이썬[편집]

input[편집]

input 함수는 파이썬에서 지원하는 표준 입력 함수이다. input()은 표준입력장치, 즉 키보드로부터 문자열을 입력받는다. input('문자열')은 문자열을 출력하고 표준입력장치로부터 문자열을 입력받는다. 그렇게 입력된 값은 문자열이다. 단, 사용자가 EOF(*nix: Ctrl-D, Windows: Ctrl-Z+Return)을 입력하면 EOFError를 발생시킨다.

예제
print('이름을 입력하세요', end="")
name = input();
print("이름 : {0}, type : {1}".format(name,type(name)))
name = input('이름을 입력하세요 ');
print("이름 : {0}, type : {1}".format(name,type(name)))
name = input('아무것도 입력하지 말고 EOF(Ctrl+D 또는 Ctrl+Z+Enter)를 입력해보세요');

실행 결과
이름을 입력하세요 한사람
이름 : 한사람, type : <class 'str'>
이름을 입력하세요 두사람
이름 : 두사람, type : <class 'str'>
아무것도 입력하지 말고 EOF(Ctrl+D 또는 Ctrl+Z+Enter)를 입력해보세요^D
Traceback (most recent call last):
  File "C:/PyThonProjects/Ex01/basic03/Ex13_input1.py", line 7, in <module>
    name = input('아무것도 입력하지 말고 EOF(Ctrl+D 또는 Ctrl+Z+Enter)를 입력해보세요');
EOFError: EOF when reading a line[8]

print[편집]

print 함수는 파이썬에서 지원하는 표준 출력 함수이다. 출력 시 출력 대상들의 사이에 구분자를 넣을때는 ','를 기술한다. 그리고 마지막 문자열을 출력하고 출력할 문자는 end를 쓴다. 출력 방향을 변경할 때는 file을 쓴다. 또한 스트림을 강제적으로 flush할지 지정할 때는 flush를 기술한다.

print("하나","둘","셋",1,2,3) 
print("하나","둘","셋",1,2,3,sep='-') 
print("첫번째 값")
print("두번째 값") # 다른 줄에 출력
print("첫번째 값", end=" ---> ")
print("두번째 값") # 같은 줄에 출력
# 출력 방향 변경
file = open("test.txt","w")
print("Hello Python!!", file=file) # 파일로 출력
file.close()

실행 결과
하나 둘 셋 1 2 3 
하나-둘-셋-1-2-3
첫번째 값
두번째 값
첫번째 값 ---> 두번째 값

마지막에 출력한 "Hello Python!!"이라는 문자열은 보이지 않는다. 하지만 "test.txt" 파일이 생성되었으며 파일의 내용으로 "Hello Python!!"이란 문자열이 저장되었음이 확인된다.

문자열 출력

파이썬에서 print 함수는 작은따옴표이든 큰따옴표이든 문자열 출력 시 같이 사용할 수 있다. 작은 따옴표안에 큰따옴표가 가능하고, 큰 따옴표안에 작은따옴표가 가능하다. 큰따옴표안에서 큰따옴표를 출력하려면 \"로 해야 하고, 작은따옴표안에서 작은따옴표를 출력하려면 \'로 해야 한다. 동일한 문자열을 여러번 출력시 " * 횟수"를 사용한다.

print('Hello World!!')
print("Hello World!!")
print("나의 이름은 '한사람'입니다.")
print('나의 이름은 "한사람"입니다.')
print("나의 이름은 \"한사람\"입니다.")
print('나의 이름은 \'한사람\'입니다.')
print('-' * 40) 

실행 결과
Hello World!!
Hello World!! 
나의 이름은 '한사람'입니다.
나의 이름은 "한사람"입니다.
나의 이름은 "한사람"입니다.
나의 이름은 '한사람'입니다.
----------------------------------------
확장 문자 출력

기본 확장 문자(escape sequence)를 지원한다. 숫자 형식의 8진법과 16진법 확장 문자들과 유니코드 확장 문자들 8진수 또는 16진수 확장 문자를 사용하여 아스키 문자를 포함시킬 수 있다. 8진수 확장 문자는 backslash()와 세 자릿수 8진수 숫자를 사용한다. 결과로는 8진수 확장 문자에 해당하는 아스키 문자가 출력된다. 16진수 확장 문자도 이와 비슷하지만 "\"가 아니라 "\x"로 시작되며 16진수 숫자로 구성되는 점이 다르다. 이 확장 문자는 문자가 더 이상 16진수가 아닐 때 종료된다. 예를 들어 문자 n은 아스키 문자표에서 십진수 값 109이다. 이는 8진수로 하면 156이며 16진수로 하면 6E이다.

  • \' : 따옴표 문자
  • \" : 쌍따옴표 문자
  • \ : backslash 문자
  • \a : bell 문자
  • \b : backslash 문자
  • \f : Formfeed 문자
  • \n : newline 문 \r : carriage return 문자(\n와 동일하지 않다.)
  • \t : tab 문자
  • \v : vertical tab 문자
print('Hello \tWorld!!')
print("Hello \nWorld!!")
print("나의 이름은 \"한사람\"입니다.")
print('나의 이름은 \'한사람\'입니다.')
print('-' * 40)
print('1 \n')
print('2 \012')
print('3 \x0A')
print('-' * 40)
print('n')
print('\156')
print('\x6E')
print('-' * 40) 

실행 결과
Hello   World!!
Hello 
World!! 
나의 이름은 "한사람"입니다.
나의 이름은 '한사람'입니다.
----------------------------------------
1 

2  

3 

----------------------------------------
n
n
n
----------------------------------------
길이와 정렬
  • {:길이} : 출력할 데이터의 길이를 지정한다. 문자열(왼쪽 정렬), 숫자(오른쪽 정렬)
  • {:<길이} : 왼쪽 정렬
  • {:>길이} : 오른쪽 정렬
  • {:^길이} : 가운데 정렬
print('Python is [{:15}]'.format('good'))
print('Python is [{:<15}]'.format('good'))
print('Python is [{:>15}]'.format('good'))
print('Python is [{:^15}]'.format('good'))
print('당신의 나이는 [{:15}]세'.format(22))
print('당신의 나이는 [{:<15}]세'.format(22))
print('당신의 나이는 [{:>15}]세'.format(22))
print('당신의 나이는 [{:<15}]세'.format(22))
print('-' * 40)

실행 결과
Python is [good           ]
Python is [good           ]
Python is [           good]
Python is [     good      ] 
당신의 나이는 [             22]세
당신의 나이는 [22             ]세
당신의 나이는 [             22]세
당신의 나이는 [22             ]세
----------------------------------------[9]

자바[편집]

Scanner[편집]

Scanner는 읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴하는 자바의 클래스 입력 클래스이다. Scanner는 입력되는 키 값을 공백으로 구분되는 토큰 단위로 읽는다. 공백 문자 '\t','\f','\r', ' ', '\n'를 사용할 수 있다. 또한 개발자가 원하는 타입 값으로 쉽게 읽을 수 있다. 입력할 때는 프로그램을 실행시키고 콘솔창에 문자열을 입력하고 엔터를 누르면 된다.

Scanner 기본 사용법
import java.util.Scanner; // 기본적으로 import문 필요
Scanner scan = new Scanner(System.in); // Scanner 객체 
예제
String name = scan.next(); // "HAN" 
String city = scan.next(); // "INCHEON" 
int age = scan.nextInt(); // 25 
double weight = scan.nextDouble(); // 65.1 
boolean single = scan.nextBoolean(); // true

입력 결과
HAN INCHEON 25 70[10]

System.out.print[편집]

System.out.print는 가장 기본적인 출력 함수이다. 형식은 System.out.print(x)이며, 여기서 x는 모든 자료형의 값이나 표현식이 될 수 있다. x라는 매개변수가 이미 문자열이 아닌 경우 String 자료형의 값으로 변환된 다음 문자열이 표준 출력(standard output)이라 불리는 목적지로 출력된다. System.out.print는 실수의 소수점 아래 숫자를 가능한 한 출력한다. 예를 들어 π은 3.1415926535899793으로 출력되며, 돈을 나타내야 하는 숫자는 1050.0 또는 43.575로 출력될 수 있다. 자바에는 '형식화된 출력(formatted output)'이란 기능이 있어 실수 및 다른 값들이 인쇄되는 방식을 쉽게 제어할 수 있다.

System.out.println

System.out.println(x)은 System.out.print와 동일한 텍스트를 출력하지만, 줄바꿈(line feed)에 의해 해당 텍스트 뒤를 이어가는데, 이는 후속된 출력이 다음 행에 있음을 의미한다. 줄바꿈만 출력하는 System.out.println()이라는 매개변수 없는 해당 함수를 사용할 수 있다.

System.out.printf

System.out.printf 기능은 형식화된 출력을 생성하는 데 사용할 수 있다. System.out.printf는 하나 이상의 매개변수를 사용한다. 첫 번째 매개변수는 출력의 형식을 지정하는 String이다. 이 매개변수를 형식 문자열(format string)이라고 한다. 나머지 매개변수들은 출력되어야 할 값을 명시한다.[11]

System.out.print(7);         // print() 메소드는 줄 바꿈을 하지 않음.
System.out.println(3);       // 정수 출력
System.out.println(3.14);    // 실수 출력
System.out.println("자바!"); // 문자열 출력
System.out.println("문자열끼리의 " + "연결도 가능합니다.");
System.out.println("숫자" + 3 + "과 문자열의 연결도 가능합니다.");

실행 결과
73
3.14
자바!!
문자열끼리의 연결도 가능합니다.
숫자3과 문자열의 연결도 가능합니다.

보조[편집]

rewind문[편집]

rewind문은 스트림 시작 부분에 파일 포인터를 설정하는 것으로 다음과 같이 나타낸다. 여러 번의 스트림 사용 시에 유용하다.

예시
#include<stdio.h>   
void main() {
    FILE *fp;
    char c;

    fp = fopen("string-file.txt", "r");
    while ((c = fgetc(fp)) != EOF) {
        printf("%c", c);
    }

    rewind(fp);//moves the file pointer at beginning of the file  
   //不用重新打开文件,直接从头读取内容
    while ((c = fgetc(fp)) != EOF) {
        printf("%c", c);
    }

    fclose(fp);

}
텍스트 파일 : string-file.txt
this is rewind()function from yiibai tutorials.
결과
this is rewind()function from yiibai tutorials.
this is rewind()function from yiibai tutorials.

backspace문[편집]

backspace문은 현재 활성 위치의 라인에서 활성 위치를 한 스페이스 뒤로 옮기는 명령이다. 키보드의 backspace 기능과 동일하며, \b로 표시한다.

예시
#include <stdioh>
int main()
{
	char test_octal_number = '\141';		// \ooo
	char test_hexadecimal_number = '\x41';		// \xhh

	printf("%c \n",test_octal_number);		// \n
	printf("%c \n",test_hexadecimal_number);

	printf("AB\bC\n");		// \b

	printf("T\tA\tB\n");		// \t

	printf("123456\r789\n");	// \r

	printf("\\ \' \" \n");		// \\ \' \"

	return 0;
}
결과
a 
A 
AC
T	A	B
789456
\ ' "[12]

endfile문[편집]

endfile문은 C언어에서 운영체제와 상관없이, 파일의 끝에 도달했을 때 언제나 특별한 값을 반환하도록 한다. 그 값을 EOF(End Of File)라고 하며, 실제로 이 값은 -1을 나타낸다.

예시
#include <stdio.h>

int main(void)

{

    char ch;

    printf("EOF가 입력될 때까지 영문자를 계속 입력받습니다 :\n");

    printf("(윈도우에서 EOF의 강제 발생은 Ctrl+Z를 누르고 나서 Enter를 누르면 됩니다)\n");

 

    while ((ch = getchar()) != EOF)

    {

        putchar(ch);

    }

    return 0;

}
실행 결과
EOF가 입력될 때까지 영문자를 계속 입력받습니다 : 
(윈도우에서 EOF의 강제 발생은 Ctrl+Z를 누르고 나서 Enter를 누르면 된다)
a
a
b
b
-1
-1
^Z[4]

각주[편집]

  1. 입출력문〉, 《네이버 지식백과》
  2. 김경미 교수, 〈입출력문 이해와 활용〉, 《한동대학교》
  3. 입출력〉, 《위키백과》
  4. 4.0 4.1 기본적인 입출력〉, 《티시피스쿨》
  5. 5.0 5.1 5.2 5.3 jhh0712, 〈C언어 표준 입출력〉, 《네이버 블로그》, 2019-03-22
  6. scanf() 함수〉, 《티시피스쿨》
  7. printf() 함수〉, 《티시피스쿨》
  8. 03. Python(파이썬) 표준 입력〉, 《위키독스》
  9. 02. Python(파이썬) 표준 출력〉, 《위키독스》
  10. 썸머워즈, 〈[JAVA 자바_스캐너(Scanner)]〉, 《티스토리》, 2019-03-21
  11. 제4절 텍스트 입력 및 출력〉, 《위키독스》
  12. atomic0x90 (Yujun Han), 〈이스케이프 시퀀스(escape sequence) 정리〉, 《깃허브》, 2019-05-28

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 입출력문 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.