200 likes | 388 Views
File Input/Output. 황 강 욱 Next Generation Communication Networks Lab. Division of Applied Mathematics KAIST. C++ Input/Output. 스트림 입출력으로 iostream.h 를 반드시 포함 Standard input : cin Standard output : cout Standard error : cerr c.f. cout 을 사용한 출력은 버퍼에 저장 cerr 을 사용한 출력은 버퍼에 저장되지 않음.
E N D
File Input/Output 황 강 욱 Next Generation Communication Networks Lab. Division of Applied Mathematics KAIST
C++ Input/Output • 스트림 입출력으로 iostream.h를 반드시 포함 • Standard input : cin • Standard output : cout • Standard error : cerr • c.f. • cout을 사용한 출력은 버퍼에 저장 • cerr을 사용한 출력은 버퍼에 저장되지 않음 Next Generation Communication Networks Lab.
#include <iostream> int main() { int id; float av; cout << "Enter the id and the average: "; cin >> id >> av ; cout << "Id " << id << ‘\n’ << "Average" << av << ‘\n’; return 0; } left-associativity Next Generation Communication Networks Lab.
cin : 값을 읽으면 true, 읽지않으면 false 값을 반환 #include <iostream> int main() { int val, sum = 0; cout << "Enter next number: "; while ( cin >> val ) { sum += val; cout << "Enter next number: "; } cout << "Sum of all values: " << sum << '\n'; return 0; } Next Generation Communication Networks Lab.
조작연산자 (manipulator) • iostream.h 파일이 필요 • dec : 10 진수로 입력 또는 출력을 수행 • endl : 개행문자를 기록하고 출력 스트림을 비움 • flush : 버퍼의 내용을 지움 • hex : 16진수로 입력 또는 출력을 수행 • oct : 8진수로 입력 또는 출력을 수행 Next Generation Communication Networks Lab.
iomanip.h 파일 필요 • setfill (char ch) : 문자(ch)로 빈칸을 채움 • setprecision (int a) : 부동소수점 정밀도를 a로 지정 • setw(int a) : 출력 너비를 a로 지정 • setw()를 제외하고 영구히 입/출력에 영향을 줌 cout << setw( 6 ); for ( i = 1; i <= 1000; i *= 10 ) cout << i << '\n'; 결과 1 10 100 1000 Next Generation Communication Networks Lab.
예제 int i = 91; cout << "i = " << i << " (decimal)\n"; cout << "i = " << oct << i << " (octal)\n"; cout << "i = " << hex << i << " (hexadecimal)\n"; cout << "i = " << i << " (hexadecimal)\n"; 결과 i = 91 (decimal) i = 133 (octal) i = 5b (hexadecimal) i = 5b (hexadecimal) hex 가 영향을 계속 줌 Next Generation Communication Networks Lab.
HW # 5. • 주어진 manipulation을 모두 이용하여 입력 또는 출력하는 예제 프로그램을 작성하시오. Next Generation Communication Networks Lab.
입출력 변환 Flags • file_var.setf(flags) • file_var.unsetf(flags) • flag 종류 • ios::left : 왼쪽 정렬 • ios::right : 오른쪽 정렬 • ios::scientific : 과학적 표기법 사용 (d.dddExx) • ios::fixed : 고정표기법을 사용 (d.ddd) • ios::showpoint : 소수점과 소수점이하 0을 표기 • ios::showpos : 음수가 아닌 수에 + 기호 사용 • ios::skipws : 입력시 공백 문자를 건너 뜀 Next Generation Communication Networks Lab.
int i = 5, j = 10; cout.setf(ios::left); //cout.unsetf(ios::left); //cout.setf(ios::right); cout << setw(5) << i << endl << setw(5) << j << endl; 5 10 int i = 5, j = 10; cout.setf(ios::left); cout.unsetf(ios::left); cout.setf(ios::right); cout << setw(5) << i << endl << setw(5) << j << endl; 5 10 Next Generation Communication Networks Lab.
float a = 1.2345000; cout.setf(ios::scientific); cout << setw(15) << a << endl; 1.234500e+000 float a = 1.2345000; cout.unsetf(ios::scientific); cout << setw(15) << a << endl; 1.2345 Next Generation Communication Networks Lab.
float a = 1.23; cout.setf(ios::fixed); cout << setw(15) << a << endl; 1.230000 float a = 1.23; cout.unsetf(ios::fixed); cout << setw(15) << a << endl; 1.23 Next Generation Communication Networks Lab.
float a = 1.2345000; cout.setf(ios::showpo); cout << setw(15) << a << endl; +1.2345 float a = 1.2345000; cout.unsetf(ios::showpo); cout << setw(15) << a << endl; 1.2345 Next Generation Communication Networks Lab.
float a = 1.2345000; cout.setf(ios::showpoint); cout << setw(15) << a << endl; 1.23450 float a = 1.2345000; cout.unsetf(ios::showpoint); cout << setw(15) << a << endl; 1.2345 Next Generation Communication Networks Lab.
ifstream my_in; ofstream my_out; my_in.open("aaa.txt"); my_out.open("bbb.txt"); my_in.unsetf(ios::skipws); char ch; my_in >> ch; while(!my_in.eof()) { my_out << ch; my_in >> ch; } my_in.close(); my_out.close(); aaa.txt bbb.txt 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 Next Generation Communication Networks Lab.
ifstream my_in; ofstream my_out; my_in.open("aaa.txt"); my_out.open("bbb.txt"); my_in.setf(ios::skipws); char ch; my_in >> ch; while(!my_in.eof()) { my_out << ch; my_in >> ch; } my_in.close(); my_out.close(); aaa.txt bbb.txt 0 1 2 3 4 5 6 7 8 9 0123456789 Next Generation Communication Networks Lab.
File Input/Output • fstream.h 파일을 반드시 포함 • 파일 변수의 선언 • ifstream in_file; //입력파일 변수 • ofstream out_file; //출력파일 변수 • 파일 변수와 파일의 연결 • in_file.open(“data_in.txt”); • out_file.open(“data_out.txt”); • 파일 닫기 • in_file.close(); • out_file.close(); Next Generation Communication Networks Lab.
flags • ios::app : 출력파일의 끝에 데이터 추가 • ios::ate : 파일을 열때 맨 끝으로 이동 • ios::in : 입력용으로연다 • ios::out : 출력용으로 연다 • ios::binary : 바이너리 파일 • ios::trunc : 쓰기용으로 열때 기존 파일의 내용을 지움 • ios::nocreate : 파일이 없으면 실패 • ios::noreplace : 파일이 있으면 실패 • ex: ofstream out_file(“data.new”, ios::binary|ios::app); Next Generation Communication Networks Lab.