3. Console 입출력 개요
프로그래밍 언어를 배울 때 출력문은 제일 먼저 만나죠.
이 책에서도 첫 번째 프로그램인 "Hello, World"에서 Console.WriteLine("Hello, World!"); 를 사용했어요.
Console.WriteLine("Hello, World!");
이번 장에서는 Console 클래스를 이용하여 출력하는 방법과 일력받는 부분에 관하여 알아볼게요.
3.1 서식 지정 문자열
Console.WriteLine 메서드에 다양한 인자를 원하는 형태로 출력하려면 첫 번째 입력 인자로 서식 지정 문자열을 전달해야 합니다. 수나 날짜, 열거형 등을 원하는 형태로 출력할 때 효과적이죠.
서식 지정 문자열은 인덱스, 배치, 포멧 문자열로 구성합니다.
{index [,alignment][:formatString]}
{인덱스[,배치][:포멧문자열]}
인덱스는 서식 지정 문자열 뒤에 오는 데이터 중에 몇 번째 데이터를 출력할 것인지를 나타냅니다. 주의할 점은 0부터 시작한다는 점입니다.
Console.WriteLine("테스트1: {0}, {1}, {2}", "Hello", 23.7, 10);
Console.WriteLine("테스트2: {0}, {2}, {1}", "Hello", 23.7, 10);
▶ 실행 결과
테스트1: Hello, 23.7, 10
테스트2: Hello, 10, 23.7
배치할 폭을 지정하는 것은 선택적입니다. 인덱스 표현 뒤에 콤마와 정수로 표현합니다. 양의 정수는 오른쪽 정렬 배치이며 음의 정수는 왼쪽 정렬 배치입니다.
Console.WriteLine("테스트3:{0,10}, {0,-10}끝", 1234);
▶ 실행 결과
테스트3: 1234, 1234 끝
그리고 포멧 문자열도 선택적으로 표현할 수 있습니다. 포멧 문자열은 원하는 진수, 지수 표현, 정수 표현 등을 나타내는 약속입니다.
Console.WriteLine("테스트4: 0x{0:X}, {0:E}, {0:N}", 12345678);
▶ 실행 결과
테스트4: 0xBC614E, 1.234568E+007, 12,345,678.00
다음은 현재까지 실습 코드입니다.
using System;
namespace _01_표준_서식_문자열
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("테스트1: {0}, {1}, {2}", "Hello", 23.7, 10);
Console.WriteLine("테스트2: {0}, {2}, {1}", "Hello", 23.7, 10);
Console.WriteLine("테스트3:{0,10}, {0,-10}끝", 1234);
Console.WriteLine("테스트4: 0x{0:X}, {0:E}, {0:N}", 12345678);
}
}
}
3.2 수식 포멧 문자열(형식 지정자)
포멧 문자열 중에 숫자 형식을 지정하는 방법을 알아봅시다.
index [,alignment][:formatString]}
{인덱스[,배치][:포멧문자열]}
포멧 문자열에서 어떠한 형식을 출력할 것이지 표현할 수 있어서 형식 지정자로도 부릅니다.
형식 지정자를 살펴보기 위해 다음처럼 변수를 선언한 상태로 설명할게요.
int iv = 12345;
double dv = 12345.6789;
double dv2 = 0.23;
알파벳 D는 10진수를 나타내는 형식 지정자입니다.
//D: 10 진수
Console.WriteLine("{0:D}", iv);
Console.WriteLine(iv.ToString("D"));
▶ 실행 결과
12345
12345
알파벳 E는 지수 표기를 나타내는 형식 지정자입니다. 예를 들어 123.4를 1.234E+002처럼 나타냅니다. 여기서 E+002는 10의 2승을 의미합니다.
//E: 지수
Console.WriteLine("{0:E}", dv);
Console.WriteLine(dv.ToString("E"));
▶ 실행 결과
1.234568E+004
1.234568E+004
알파벳 F는 고정 소수점 표현을 나타내는 형식 지정자입니다.
//F: 고정 소수점
Console.WriteLine("{0:F}", dv);
Console.WriteLine(dv.ToString("F"));
▶ 실행 결과
12345.68
12345.68
알파벳 G는 지수 표현 혹은 고정 소수점 표현 중에 간단한 형태로 표현하는 것으로 일반 표현이라고 부릅니다.
//G:일반
Console.WriteLine("{0:G}", dv);
Console.WriteLine(dv.ToString("G"));
Console.WriteLine("{0:G}", 0.0000023);
▶ 실행 결과
12345.6789
12345.6789
2.3E-06
알파벳 N은 세 자리마다 콤마를 붙여서 수를 표현합니다.
//N:숫자
Console.WriteLine("{0:N}", 123456789);
▶ 실행 결과
123,456,789.00
알파벳 P는 백분율 표현입니다.
//P: 백분율
Console.WriteLine("{0:P}", dv2);
Console.WriteLine(dv2.ToString("P"));
▶ 실행 결과
23.00%
23.00%
알파벳 X는 16진수 표현입니다. 16진수인 것을 알 수 있게 앞에 0x 혹은 0X를 같이 출력하면 더 좋겠죠.
//X: 16진수
Console.WriteLine("0x{0:X}", iv);
Console.WriteLine("0x{0}", iv.ToString("X"));
Console.WriteLine("0x{0:X}", 255);
▶ 실행 결과
0x3039
0x3039
0xFF
다음은 전체 소스 코드입니다.
using System;
namespace _02_형식_지정자
{
internal class Program
{
static void Main(string[] args)
{
int iv = 12345;
double dv = 12345.6789;
double dv2 = 0.23;
//D: 10 진수
Console.WriteLine("{0:D}", iv);
Console.WriteLine(iv.ToString("D"));
//E: 지수
Console.WriteLine("{0:E}", dv);
Console.WriteLine(dv.ToString("E"));
//F: 고정 소수점
Console.WriteLine("{0:F}", dv);
Console.WriteLine(dv.ToString("F"));
//G:일반
Console.WriteLine("{0:G}", dv);
Console.WriteLine(dv.ToString("G"));
Console.WriteLine("{0:G}", 0.0000023);
//N:숫자
Console.WriteLine("{0:N}", 123456789);
//P: 백분율
Console.WriteLine("{0:P}", dv2);
Console.WriteLine(dv2.ToString("P"));
//X: 16진수
Console.WriteLine("0x{0:X}", iv);
Console.WriteLine("0x{0}", iv.ToString("X"));
Console.WriteLine("0x{0:X}", 255);
}
}
}
3.3 정수 및 실수의 자릿수 지정
이번에는 형식 지정자를 이용하여 정수 및 실수의 자릿수를 지정하는 것을 알아봅시다.
[표 3.2]는 자릿수를 지정하는 표현과 예를 간략하게 나타낸 것입니다.
설명하기 위해 다음의 변수를 선언한 상태에서 출발할게요.
double dv = 1234.123456789;
int iv = 123;
포멧 문자열에 0의 개수는 정수 자릿수를 의미하며 빈 자리는 0을 출력합니다.
//0의 개수 = 정수 자릿수(빈 자리는 0 출력)
Console.WriteLine("{0:000000}", iv);
Console.WriteLine("{0:000000}", dv);
▶ 실행 결과
000123
001234
알파벳 D 뒤에 정수 표현도 정수 자릿수를 의미합니다. 이 때 전달하는 인자는 정수 형식이어야 합니다.
//"D정수" = 정수 자릿수(빈 자리는 0 출력)
Console.WriteLine("{0:D6}", iv);
//Console.WriteLine("{0:D5}",dv); //오류
▶ 실행 결과
000123
점(.) 뒤에 0의 개수는 소수점 이하 자리를 의미합니다.
//"." 뒤에 0의 개수 = 소수점 이하 자릿수
Console.WriteLine("{0:.000000}", dv);
▶ 실행 결과
1234.123457
형식 지정자 N 혹은 F 뒤에 오는 정수도 소수점 이하 자리를 의미합니다. 참고로 형식 지정자 N 혹은 F 뒤에 정수를 표현하지 않으면 소수점 2번째 자리까지 표현합니다.
//실수 값의 형식 지정자 뒤에 정수= 소수점 이하 자릿수
Console.WriteLine("{0:N}", dv);
Console.WriteLine("{0:N4}", dv);
Console.WriteLine("{0:F}", dv);
Console.WriteLine("{0:F5}", dv);
▶ 실행 결과
1,234.12
1,234.1235
1234.12
1234.12346
다음은 실습에 사용한 전체 코드입니다.
using System;
namespace _03_자릿수_지정
{
internal class Program
{
static void Main(string[] args)
{
double dv = 1234.123456789;
int iv = 123;
//0의 개수 = 정수 자릿수(빈 자리는 0 출력)
Console.WriteLine("{0:000000}", iv);
Console.WriteLine("{0:000000}", dv);
//"D정수" = 정수 자릿수(빈 자리는 0 출력)
Console.WriteLine("{0:D6}", iv);
//Console.WriteLine("{0:D5}",dv); //오류
//"." 뒤에 0의 개수 = 소수점 이하 자릿수
Console.WriteLine("{0:.000000}", dv);
//실수 값의 형식 지정자 뒤에 정수= 소수점 이하 자릿수
Console.WriteLine("{0:N}", dv);
Console.WriteLine("{0:N4}", dv);
Console.WriteLine("{0:F}", dv);
Console.WriteLine("{0:F5}", dv);
}
}
}
'C# > 디딤돌 C#' 카테고리의 다른 글
[C#] 2. 기본 형식 II - 다양한 정수 형식, 실수 형식 (1) | 2024.01.22 |
---|---|
[C#] 2. 기본 형식 I - 메모리 크기 확인, 논리 형식 bool, 문자 형식 char (2) | 2024.01.19 |
1. C# 소개 (0) | 2024.01.18 |