[12.1]
/*
실행 결과와 같이 1부터 10까지의 값들에 대한 제곱값과 나누기 3을 한 값을 "out1.txt" 파일로 출력해본다
각 출력값들에 대해 적절한 크기의 필드를 지정하고 오른쪽 정렬로 출력하도록 한다.
나누기 3을 한 값의 결과는 실수로 처리될 수 있어야 하며 소수점 이하 첫 번째 자리까지만 출력하도록 한다
*/
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
ofstream fout("out1.txt"); //출력 스트림 생성 및 파일 열기
if (!fout)
{
cout << "파일 열기 에러" << endl;
return 1;
}
for (int i = 1; i <= 10; i++)
{
double divide = i / (3.0);
int square = i*i;
fout.width(10);
fout.setf(ios_base::fixed, ios_base::floatfield); //부동소수점 표시
fout.precision(1); //소수점 한자리
fout << i << "\t" << square << "\t" << divide << endl;
}
fout.close();
return 0;
}
[12.2]
/*
연습문제 12.1애서 만든 "out1.txt"로부터 데이터를 입력받아 화면에 출력해 본다
데이터를 읽을 때는 int형, int형, double형의 순서대로 읽어 들여야 제대로 값이 입력됨을 명심한다.
*/
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
int num1, num2;
double num3;
ifstream fin("out1.txt");
if (!fin)
{
cout << "파일 열기 에러" << endl;
return 1;
}
fin >> num1;
while (!fin.eof()) //파일이 끝나기 전까지
{
cout << num1 << "\t";
fin >> num2;
cout << num2 << "\t";
fin >> num3;
cout << num3 << endl;
fin >> num1;
}
fin.close();
return 0;
}
[12.3]
/*
연습문제 12.1에서 작성한 "out1.txt" 파일의 끝부분에 11부터 20까지의 정수에 대한 제곱값과 나누기 3의 값을 저장해 본다.
기존 파일의 내용은 그대로 남아있어야 한다
*/
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
ofstream fout("out1.txt", ios_base::out|ios_base::app); //출력 스트림 생성 및 파일 열기, 기존 데이터 유지 위해 trunc 포함 X
if (!fout)
{
cout << "파일 열기 에러" << endl;
return 1;
}
for (int i = 11; i <= 20; i++)
{
double divide = i / (3.0);
int square = i*i;
fout.width(10);
fout.setf(ios_base::fixed, ios_base::floatfield); //부동소수점 표시
fout.precision(1); //소수점 한자리
fout << i << "\t" << square << "\t" << divide << endl;
}
fout.close();
return 0;
}
[12.4]
/*
파일을 읽어 각 알파벳 문자가 몇 개씩 있는지를 출력하는 프로그램을 작성한다.
소문자와 대문자는 동일한 것으로 취급한다.
문자 단위 입력 함수인 get함수를 사용하면 편할 것이다
*/
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
ifstream fin("alphabet.txt");
int alphabet[26] = { 0, }; //하나하나 세기에는 많으니 배열 선언
if (!fin)
{
cout << "파일 열기 에러" << endl;
return 1;
}
char ch = fin.get(); //문자 단위 입력 함수
while (!fin.eof())
{
if (ch >= 65 && ch <= 90)
{
alphabet[ch - 65]++;
}
if (ch >= 97 && ch <= 122)
{
alphabet[ch - 97]++; //대소문자 똑같이 취급
}
fin.get(ch);
}
for (int i = 0; i < 26; i++)
{
char character = i + 65;
cout << character << ": " << alphabet[i] << " ";
if (i != 0 && i % 10 == 0)
cout << endl;
}
cout << endl;
fin.close();
return 0;
}
[12.5]
/*
파일 전체를 줄 단위로 읽어 화면에 출력해 본다
getline 함수에 대한 연습문제이다
*/
#include <iostream>
#include <fstream>
using namespace std;
#define MAX 256
int main(void)
{
ifstream fin("text.txt");
char buff[MAX];
while (!fin.eof())
{
fin.getline(buff, MAX, '\n'); //MAX 크기의 버프에 저장
cout << buff << endl;
}
fin.close();
return 0;
}
[12.6]
/*
int형 변수를 선언하고 값을 1094795585로 초기화한다.
그리고 이 값을 파일로 출력하되 한번은 << 연산자를 사용하고,
또 한번은 write 함수를 사용하여 출력한 후 결과를 서로 비교해 본다.
똑같은 작업을 표준 출력 객체인 cout을 통해서도 출력해본다
*/
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
int num = 1094795585;
cout << "그냥 출력했을 경우 num: ";
cout << num << endl;
ofstream fout("out5.txt", ios_base::out | ios_base::trunc | ios_base::binary);
fout.write((char*)&num, sizeof(num)); //write 함수를 사용
fout.close();
ifstream fin("out5.txt", ios_base::in | ios_base::binary);
cout << "write 함수 사용한 뒤 read로 읽어들인 num: ";
while (fin.read((char*)&num, sizeof(num))) //read
cout << num;
cout << endl;
fin.close();
return 0;
}
[12.7]
/*
다음과 같은 student 구조체가 있다.
실행 결과와 같이 사용자로부터 학생 정보를 입력받아 파일로 저장한 후,
다시 그 파일로부터 학생 정보를 읽어 들여 화면에 출력해본다
*/
#include <iostream>
#include <fstream>
using namespace std;
typedef struct student
{
char name[20]; //이름
int age; //나이
char dpt[20]; //소속학과
}Student;
int main(void)
{
Student std;
char sel = 'y';
ofstream fout("out6.txt", ios_base::out | ios_base::trunc);
while (1)
{
cout << "학생정보를 입력하시오(예: y, 아니요: n) ";
cin >> sel;
if (sel == 'n')
break;
while (sel != 'y'&&sel != 'n')
{
getchar(); //버퍼 지운다
cout << "재입력: ";
cin >> sel;
}
cout << "이름: ";
cin >> std.name;
cout << "나이: ";
cin >> std.age;
cout << "학과: ";
cin >> std.dpt;
fout.write((char*)&std, sizeof(std));
}
fout.close();
cout << "파일에 저장된 학생 정보를 출력합니다" << endl;
ifstream fin("out6.txt", ios_base::in);
while (fin.read((char*)&std, sizeof(std)))
{
cout << "이름: " << std.name << endl;
cout << "나이: " << std.age << endl;
cout << "학과: " << std.dpt << endl;
cout << endl;
}
fout.close();
return 0;
}
[12.8]
/*
하나의 텍스트 파일을 또 다른 파일로 복사하되 파일 내용을 역방향으로 출력한다
*/
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
ifstream fin("out7.txt"); //복사할 텍스트 파일
ofstream fout("out8.txt");
fin.seekg(0, fin.end); //파일 끝으로 가서
long length = fin.tellg(); //파일 크기
char c;
char before='a';
while (length--)
{
fin.seekg(length, fin.beg);
fin >> c;
//cout << c << endl;
if (before == c)
{
fout << endl;
continue;
}
fout << c;
before = c;
}
return 0;
}
개발 환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 기초를 탄탄히 세워주는 C++ 프로그래밍 입문 황준하 저
*9번 문제는 마저 풀고 포스팅하겠습니다
'C++ > 기초를 탄탄히 세워주는 C++ 프로그래밍 입문(황준하 저)' 카테고리의 다른 글
기초를 탄탄히 세워주는 C++ 프로그래밍 입문 14장 연습문제 (0) | 2017.07.16 |
---|---|
기초를 탄탄히 세워주는 C++ 프로그래밍 입문 13장 연습문제 (0) | 2017.07.14 |
기초를 탄탄히 세워주는 C++ 프로그래밍 입문 11장 연습문제 (0) | 2017.07.10 |
기초를 탄탄히 세워주는 C++ 프로그래밍 입문 10장 연습문제 (0) | 2017.07.07 |
기초를 탄탄히 세워주는 C++ 프로그래밍 입문 9장 연습문제 (0) | 2017.07.06 |