쉽게 풀어쓴 C 프로그래밍

Similar documents
쉽게 풀어쓴 C 프로그래밍

설계란 무엇인가?

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

쉽게 풀어쓴 C 프로그래밍

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - [2009] 02.pptx

C++ Programming

C프로-3장c03逞풚

설계란 무엇인가?

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

설계란 무엇인가?

C++ Programming

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

슬라이드 1

12 장파일입출력 파일입출력의기초파일열기, 사용하기, 닫기파일입출력모드문자단위파일입출력텍스트파일과이진파일 read, write 함수에의한이진파일입출력임의접근입출력스트림상태입출력연산자오버로딩과파일입출력 C++ 프로그래밍입문

Microsoft PowerPoint - Chapter 1-rev

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint Template

C++ Programming

Microsoft PowerPoint - chap12.ppt [호환 모드]

PowerPoint Presentation

BMP 파일 처리

Microsoft PowerPoint - Chapter 6.ppt

PowerPoint 프레젠테이션

Microsoft PowerPoint - additional01.ppt [호환 모드]

080629_CFP °ø°³¿ë.hwp

Programming hwp

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

제 1 장 기본 개념

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Lesson13.pptx

Microsoft PowerPoint - additional08.ppt [호환 모드]

C++ Programming

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

윤성우의 열혈 TCP/IP 소켓 프로그래밍

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

Microsoft PowerPoint - additional06.ppt [호환 모드]

K&R2 Reference Manual 번역본

금오공대 컴퓨터공학전공 강의자료

2002년 2학기 자료구조

설계란 무엇인가?

PowerPoint Template

Microsoft PowerPoint - Chapter 10.ppt

2007_2_project4

<4D F736F F F696E74202D2034C5D8BDBAC6AEC6C4C0CFC0D4C3E2B7C2312E505054>

본 강의에 들어가기 전

Microsoft PowerPoint - 9ÀÏ°_ÂüÁ¶ÀÚ.ppt

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chap12-OOP.ppt

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Slide 1

Microsoft PowerPoint - additional07.ppt [호환 모드]

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

설계란 무엇인가?

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - chap11.ppt [호환 모드]

Microsoft PowerPoint - ch07 - 포인터 pm0415

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

PowerPoint Template

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

PowerPoint Presentation

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

중간고사

untitled

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

1. 기본형의형변환복습 C/C++ 형변환의종류 자동형변환 ( 묵시적형변환 ) 강제형변환 ( 명시적형변환 ) 기본형의자동형변환의예 1. 배열 to 포인터변환 배열명은해당배열의첫번째원소의 주소로변환됨 int ary[10]; int *pary = ary; 2. 함수 to 포

Microsoft PowerPoint - additional03.ppt [호환 모드]

Slide 1

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

Blackjack Game [Project #1] Multiplayer Blackjack Game 블랙잭은 21을넘지않는한도내에서딜러와겨루어숫자가높으면이기는게임 1 딜러 (House) 가자신을포함한참가자전원에게카드두장을나누어주는데, 딜러의카드한장은참가자들에게보이지않는다

11장 포인터

C++ Programming

제1장 Unix란 무엇인가?

PowerPoint 프레젠테이션

chap10.PDF

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Slide 1

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

The Pocket Guide to TCP/IP Sockets: C Version

Blog

02장.배열과 클래스

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - chap11-포인터의활용.pptx

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx

Microsoft PowerPoint - 04-UDP Programming.ppt

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

윤성우의 열혈 TCP/IP 소켓 프로그래밍

<432B2BC7C1B7CEB1D7B7A1B9D628BABBB9AE5FC3D6C1BE295B315D2E687770>

Transcription:

제 13 장파일처리 1. 스트림의개념을이해한다. 2. 객체지향적인방법을사용하여파일입출력을할수있다. 3. 텍스트파일과이진파일의차이점을이해한다. 4. 순차파일과임의접근파일의차이점을이해한다.

이번장에서만들어볼프로그램

스트림 (stream) 스트림 (stream) 은 순서가있는데이터의연속적인흐름 이다. 스트림은입출력을물의흐름처럼간주하는것이다.

입출력관련클래스들

파일쓰기 int main() { ofstream os{ "numbers.txt" ; if (!os) { cerr << " 파일오픈에실패하였습니다 " << endl; exit(1); for(int i=0;i<100; i++) os << i <<" "; return 0; // 객체 os 가범위를벗어나면 ofstream 소멸자가파일을닫는다.

파일읽기 int main() { ifstream is{ "numbers.txt" ; if (!is) { cerr << " 파일오픈에실패하였습니다 " << endl; exit(1); int number; while (is) { is >> number; cout << number << " "; cout << endl; return 0; // 객체 is 가범위를벗어나면 ifstream 소멸자가파일을닫는다.

파일모드

예제 int main() { using namespace std; ofstream os("sample.txt", ios::app); if (!os) { cerr << " 파일오픈에실패하였습니다 " << endl; exit(1); os << " 추가되는줄 #1" << endl; os << " 추가되는줄 #2" << endl; return 0;

Lab: 온도데이터를처리해보자 #1

예제 #include <iostream> #include <fstream>// 파일입출력을하려면헤더파일을포함하여야한다. using namespace std; int main() { ifstream is{ "temp.txt" ; if (!is) { //! 연산자오버로딩 cerr << " 파일오픈에실패하였습니다 " << endl; exit(1); int hour; double temperature; while (is >> hour >> temperature) { cout << hour << " 시 : 온도 "<< temperature << endl; return 0;

Lab: 온도데이터를처리해보자 #2 파일에서읽은데이터를객체로벡터에저장했다가다시꺼내서화면에출력해보자.

Solution class TempData { public: int hour; double temperature; ; int main() { ifstream is{ "temp.txt" ; if (!is) { //! 연산자오버로딩 cerr << " 파일오픈에실패하였습니다 " << endl; exit(1); vector<tempdata> temps;

Solution int hour; double temperature; while (is >> hour >> temperature) { temps.push_back(tempdata{ hour, temperature ); for ( TempData t : temps) { cout << t.hour << " 시 : 온도 " << t.temperature << endl; return 0;

멤버함수를이용한파일입출력 get(), put() #include <iostream> #include <fstream> using namespace std; int main() { ifstream is{ "scores.txt" ; if (!is) { //! 연산자오버로딩 cerr << " 파일오픈에실패하였습니다 " << endl; exit(1);

멤버함수를이용한파일입출력 get(), put() char c; is.get(c); // 하나의문자를읽는다. while (!is.eof()) // 파일의끝이아니면 { cout << c; is.get(c); cout << endl; return 0;

예제 #include <string> #include <iostream> using namespace std; int main() { string address; cout << " 주소를입력하시오 : "; getline(cin, address); cout << " 안녕! " << address << " 에사시는분 " << endl; return 0;

출력형식지정

Lab: 줄번호를붙여보자. 소스가저장된텍스트파일을읽어서각줄의앞에숫자를붙인후에출력파일에기록하여보자.

Solution int main() { ifstream is("scores.txt");; ofstream os("result.txt"); ; if (is.fail()) { cerr << " 파일오픈실패 " << endl; exit(1); if (os.fail()) { cerr << " 파일오픈실패 " << endl; exit(1);

Solution char c; int line_number = 1; is.get(c); os << line_number << ": "; while (!is.eof()) { os << c; if (c == '\n') { line_number++; os << line_number << ": "; is.get(c); return 0;

텍스트와이진파일

텍스트와이진파일의저장방법비교

이진파일입출력 ofstream os{ "test.dat", ofstream::binary ; int x=5; os.write((char*)&x, sizeof(int)); // 정수변수는 4 바이트로이루어져있다.

예제 int main() { int buffer[] = { 10, 20, 30, 40, 50 ; ofstream os{ "test.dat",ofstream::binary ; if (!os) { cout << "test.txt 파일을열수없습니다." << endl; exit(1); os.write((char *)&buffer, sizeof(buffer)); return 0;

예제 int main() { int buffer[5]; ifstream is{ "test.dat", ifstream::binary ; if (!is) { cout << "test.txt 파일을열수없습니다." << endl; exit(1); is.read((char *)&buffer, sizeof(buffer)); for(auto& e: buffer) cout << e << " "; return 0;

Lab: 이진파일복사프로그램 하나의이미지파일을다른이미지파일로복사하는프로그램을작성하여보자.

Solution #include <iostream> #include <fstream> #include <string> using namespace std; int main() { string ifile, ofile; cout << " 원본파일이름 :"; cin >> ifile; cout << " 복사파일이름 :"; cin >> ofile; ifstream source(ifile, ios::binary); ofstream dest(ofile, ios::binary);

Solution #if 1 #else #endif dest << source.rdbuf(); if (source.is_open() && dest.is_open()) { while (!source.eof()) { dest.put(source.get()); return 0;

임의접근파일 순차접근 (sequential access) 방법 : 데이터를파일의처음부터순차적으로읽거나기록하는방법 임의접근 (random access) 방법 : 파일의어느위치에서든지읽기와쓰기가가능한방법

임의접근파일의원리 파일위치표시자 : 읽기와쓰기동작이현재어떤위치에서이루어지는지를나타낸다. 파일위치표시자 강제적으로파일위치표시자를이동시키면임의접근이가능

임의접근관련함수 seekg(long offset, seekdir way); is.seekg(ios::beg, 100); is.seekg(ios::end, 0); is.seekg(ios::cur, -100);

예제 예제에서는 10 개의난수를저장한이진파일을만들고파일의크기를알아낸다음에파일의중간으로파일위치표시자를이동시켜서그위치에있는난수를읽어오는프로그램을작성하여보자.

Solution const int SIZE = 10; int main() { int data; // 이진파일을쓰기모드로연다. ofstream os{ "test.dat", ofstream::binary ; if (os.fail()) { cout << "test.dat 파일을열수없습니다." << endl; exit(1); for (int i = 0; i < SIZE; i++) { data = rand(); cout << data << " "; os.write((char *)&data, sizeof(data)); os.close();

Solution // 이진파일을읽기모드로연다. ifstream is{ "test.dat", ofstream::binary ; if (is.fail()) { cout << "test.dat 파일을열수없습니다." << endl; exit(1); // 파일크기를알아낸다. is.seekg(0, ios::end); long size = is.tellg(); cout << endl << " 파일크기는 " << size << endl; // 파일의중앙으로위치표시자를이동시킨다. is.seekg(size/2, ios::beg); is.read((char *)&data, sizeof(int)); cout << " 중앙위치의값은 " << data << endl; return 0;

Lab: 행맨업그레이드

Solution #include <conio.h> #include <iostream> #include <string> #include <fstream> #include <vector> using namespace std; int main() { vector<string> words; ifstream infile("d:/words.txt"); while (infile) { string word; infile >> word; words.push_back(word);

Solution while (true) { string r = words[rand() % words.size()]; cout << " 이번에선택된단어는 " << r << endl; getch(); return 0;

Lab: 이미지파일을읽어서표시해 보자.

#include <windows.h> Solution #include <iostream> #include <fstream> using namespace std; int main() { HDC hdc = GetWindowDC(GetForegroundWindow()); // 이진파일을쓰기모드로연다. ifstream is{ "d:\\lena(256x256).raw", ifstream::binary ; if (is.fail()) { cout << "d:\\lena(256x256).raw 파일을열수없습니다." << endl; exit(1); int size = 256 * 256; char * memblock = new char[size]; is.read(memblock, size); is.close();

Solution int r, c; for (r = 0; r < 256; r++) { for (c = 0; c < 256; c++) { int red, green, blue; red = green = blue = memblock[r * 256 + c]; SetPixel(hdc, c, r, RGB(red, green, blue)); delete memblock; return 0;

Q & A