C++에서 ifstream(입력 파일 스트림)을 사용하면 텍스트 파일에 저장된 정수 데이터를 손쉽게 읽어올 수 있습니다. 이 글에서는 a.txt라는 텍스트 파일에서 정수들을 하나씩 읽어 배열에 저장한 뒤 출력하는 기본적인 예제를 소개합니다.
예제 코드
#include <fstream>
#include <iostream>
using namespace std;
int main() {
// 배열 크기 초기화
int arr[30];
ifstream is("a.txt");
int cnt = 0;
int x;
// 배열이 가득 차지 않았고, 파일에서 정수를 읽어올 수 있는 동안 반복
while (cnt < 30 && is >> x)
arr[cnt++] = x;
// 배열에 저장된 정수 출력
cout << "The integers are:" << "\n";
for (int i = 0; i < cnt; i++) {
cout << arr[i] << ' ';
}
// 파일 닫기
is.close();
}실행 결과
The integers are: 1 2 3 4 5 6 7
코드 설명
#include <fstream> 헤더를 포함하면 파일 입출력에 사용되는 ifstream 클래스를 사용할 수 있습니다. ifstream is("a.txt"); 구문은 a.txt 파일을 읽기 모드로 열고, 해당 스트림 객체를 생성합니다.
핵심은 while 반복문입니다. is >> x는 파일에서 공백이나 줄바꿈으로 구분된 정수를 하나씩 읽어 변수 x에 저장하며, 더 이상 읽을 값이 없거나 파일의 끝(EOF)에 도달하면 거짓(false)을 반환하여 반복이 종료됩니다. 동시에 cnt < 30 조건을 통해 배열의 크기를 초과하지 않도록 안전장치를 두었습니다.
읽어온 값들은 arr[cnt++] = x; 구문으로 배열에 순서대로 저장되며, 이후 for 반복문을 통해 저장된 모든 정수를 화면에 출력합니다. 마지막으로 is.close()를 호출해 열려 있던 파일을 닫아 리소스를 해제합니다.
참고 사항
파일이 존재하지 않거나 열기에 실패한 경우를 대비하려면, 파일을 연 직후 if (!is) { /* 오류 처리 */ }와 같이 스트림 상태를 확인하는 것이 좋습니다. 또한 C++11 이후에는 <vector>와 함께 범위 기반 반복자를 사용하면 배열 크기 제한 없이 더 유연하게 처리할 수 있습니다.