728x90
include된 라이브러리
#include <iostream>//cin, cout
#include <fstream>//ofstream, ifstream, fstream
#include <iomanip>//setw
using namespace std;
파일 입출력, fin, fout
int main() {
char ch;
ofstream fout;
fout.open("char.txt"); //project8.exe
while (true) {
cin >> ch;
if (ch == 'q')
break;
fout.put(ch);
}
fout.close();
ifstream fin;
fin.open("char.txt");//파일 이름은 대소문자 구분x
if (!fin) {
cout << "file not found" << endl;
exit(100);
}
while (true) {
fin.get(ch);
if (!fin)//파일의 끝까지 다 읽으면 fin==false (fin.eof())
break;
cout << ch << endl;
}
fin.close();
return 0;
}
cout, cin 관련 메소드
int main() {
double a = 12.345;
cout << a << endl;
cout.width(15);//.은 객체가 가지고 있는 멤버를 호출시 사용 setw와 비슷한 기능 but width는 메소드이다.
cout.precision(4);//출력되는 숫자의 유효숫자갯수를 정함.
cout.fill('-');
cout << a << endl;//fout으로 사용하면 파일에도 반영됨
cout << 22.33334 << endl;//width와 fill은 해제 precision은 해제x 상황에 따라 다름.
char ch;
cin.unsetf(ios::skipws);// ws: white space
cin >> ch;
cout << '(' << ch << ')' << endl;//공변 문자입력을 무시한다.
cin.setf(ios::skipws);
cin >> ch;
cout << '(' << ch << ')' << endl;
return 0;
}
파일 입출력 활용 예시
스케치
pseudo-code
반복: 모든 학생정보를 읽을 때까지
1) 학생정보 ch7STUFL.DAT로부터 1줄씩 읽는다(ID, score1, score2, score3)
2) score1,score2, score3를 이용해서 평균값, grade를 산출한다.
3) 파일에 ID, avg, grade를 저장
bool readStu(ifstream& fin, int& id, int& score1, int& score2, int& score3) {// 위치정보 동기화가 필요하기 때문에 &붙임 main과 함수의 변수들 연결
//fin>>: 하나의 word 문자열을 읽기 (공백, 줄바꿈문자)
fin >> id >> score1 >> score2 >> score3;
if (!fin)
return false;
else
return true;
}
void calcGrade(int score1, int score2, int score3, int& avg, char& grade) {
avg = (score1 + score2 + score3) / 3;
if (avg >= 90)
grade = 'A';
else if (avg >= 80)
grade = 'B';
else if (avg >= 70)
grade = 'C';
else if (avg >= 60)
grade = 'D';
else
grade = 'F';
}
void writeStu(ofstream& fout, int id, int avg, char grade) {
fout.fill('0');
cout << setw(4) << id;
fout.fill(' ');
cout << setw(3) << avg;
cout << setw(2) << grade << endl;//저장
}
int main() {
ifstream fin("ch7STUFL.DAT");
ofstream fout("grade.txt");
if (!fin || !fout) {
cout << "Error: file open failed" << endl;
exit(100);//예외처리
}
int id, score1, score2, score3, avg;
char grade;
while (readStu(fin, id, score1, score2, score3)){
calcGrade(score1, score2, score3, avg, grade);
writeStu(fout, id, avg, grade);
}
cout << "End grading" << endl;
fin.close();
fout.close();
return 0;
}
*precision(n) - 소수의 경우 유효 자리 수를 결정하는 메소드
728x90
'👨🏫Study > C++' 카테고리의 다른 글
[C++] 08 - 포인터, 벡터 활용 예시 (0) | 2021.08.06 |
---|---|
[C++] 07 - 참조(reference), 포인터(Pointer) 변수 (0) | 2021.08.05 |
[C++] 05 - 파일 입출력(fstream, ifstream, ofstream) (0) | 2021.08.04 |
[C++] 04 - swtich문, if문, while문, for문 (0) | 2021.08.04 |
[C++] atoi(문자열을 정수로), itoa(정수를 문자열로) (0) | 2021.07.30 |
댓글