2017-11-28 3 views
0

판매 된 품목의 가격을 계산하는 간단한 프로그램을 만들었습니다. 정보를 파일에 저장합니다. 문자열과 정수가 들어있는이 파일을 읽으려고합니다. 파일 끝까지 읽는 좋은 방법은 무엇입니까? 현재 EOF 기능을 사용하고 있지만 제대로 작동하지 않습니다. 마지막 두 줄을 반복합니다.배수 데이터 형식을 사용할 때 파일 끝까지 올바르게 읽는 방법 C++

void viewTransactions(); 
void viewTransactions() 
{ 
    string productName,; 
    int quantity, totalPrice; 

    ifstream infile; 
    infile.open ("transactions.txt"); 
    while(!infile.eof()) 
    { 
    getline(infile, productName); 
    infile >> quantity; 
    infile >> totalPrice; 
    infile.ignore(100, '\n'); 

    cout << productName << endl; 
    cout << quantity << endl; 
    cout << totalPrice << endl; 


    } 
} 

는 "transactions.txt는"이 포함되어

Product 
1 
5 
Product 
2 
10 
Product 
3 
15 

콘솔 출력 파일을 읽을 때 :

Product 
1 
5 
Product 
2 
10 
Product 
3 
15 

3 
15 
+1

샘플 텍스트 파일을 제공해 주시겠습니까? 나는 "transactions.txt"의 2-3 행을 의미합니다. – gsamaras

+0

@gsamaras 당신이 요청한 것을 삽입했습니다. plz를 볼 수 있습니까? –

+0

감사합니다. Hugo. 당신은 고전적인 실수를 저질렀습니다. 따라서 저는 여러분의 질문에 대한 표준적인 링크를 촉구했습니다. 게다가 @BasileStarynkevitch는 이미 해결 방법을 제안 했으므로 (여기서는 확인하지 않았다), 여기에서 내 작업이 완료되었습니다. 행운을 빕니다! =) – gsamaras

답변

0

infile.eof() 후에 읽기 작업 (하지 "전에"유효). ...

for(;;) { 
    getline(infile, productName); 
    if (infile.eof()) break; 
    infile >> quantity; 
    infile >> totalPrice; 

등 (또는 do ... while(!infile.eof()) 루프를 사용) : 그리고 std::getline 더 나은 코드, 그래서 eofbit을 설정할 수 있습니다.

(적어도 리눅스와 같은 POSIX에서는) OS 레벨에서 (즉, syscalls(2)에 나열된 시스템 호출을 사용하여) 마술로 EOF 조건을 테스트 할 방법이 없습니다. 이전read(2) 작업.

자세히, 모든 경고 및 디버그 정보 (g++ -Wall -Wextra -gGCC)로 컴파일해야합니다. 그런 다음 디버거 gdb을 사용하면 버그를 직접 발견하게됩니다.

관련 문제