2010-07-08 3 views
2

멍청한 질문에 죄송하지만 C++을 처음 사용했습니다.간단한 noob I/O 질문 (C++)

한 줄로 된 정보를 파일에서 읽고 일부 계산을 수행하고 다른 파일로 출력해야합니다. 예를 들어, 각 행에 대해 고유 한 ID, 이름 및 2 개의 숫자를 읽습니다. 마지막 2 개 숫자들은 승산, 출력 파일의 ID, 이름, 제품 라인 씩 출력된다

input.txt을 :

2431 John Doe 2000 5 
9856 Jane Doe 1800 2 
4029 Jack Siu 3000 10 

경우 output.txt :

ID  Name Total 
2431 John Doe 10000 
9856 Jane Doe 3600 
4029 Jack Siu 30000 

내 코드는 이와 비슷하지만 첫 번째 행만 출력 파일에 나타납니다. 나는 반복 Enter을 누르면 다른 라인은 출력 파일에 나타납니다

내 유일한 문제는 값이 출력 파일에 나타 나는 반복 Enter을 누르면하지 않는 한, 다음 프로그램을 종료하지 않는 것이,이다
#include <fstream> 
using namespace std; 

ifstream cin("input.txt"); 
ofstream cout("output.txt"); 

int main() { 

    int ID, I, J; 
    string First, Last; 
    char c; 

    cout << "ID\tName\t\Total\n"; 

    while ((c = getchar()) != EOF) { 
     cin >> ID >> First >> Last >> I >> J; 
     cout << ID << " " << First << " " << Last << " " I * J << "\n"; 
    } 

    return 0; 
} 

. 누구든지 키보드 입력없이 작업을 수행하려면 위의 코드에 대한 수정 사항을 제안 할 수 있습니까? 감사!

+2

cin/cout을 다른 것으로 변경하십시오. 읽을 때 혼란스럽고 문제가 발생할 수 있습니다. –

+2

규칙'cin'과'cout'은 ''헤더에'stdin'과'stdout'을 참조하기 위해 정의됩니다. 파일을 입출력에 사용하려면 콘솔의 재 지정 기능인'app < input.txt > output.txt'를 사용하십시오. 이제 앱은 다시 컴파일하지 않고도 다양한 입력 및 출력 파일을 사용할 수 있습니다. – Eclipse

답변

9

내가 비록 내가 더 잘 확인하고이 일을 확인 해답을 찾고있는 동안 사용

while (!cin.eof()) { 
+0

감사합니다 ... cin 회원을 찾고 있었는데 깨닫지 못했습니다.() 존재했습니다 ... – Zach

+0

환영합니다 :-) – jdehaan

+1

다시 틀린데, 'while (cin >> someChar)'을 사용하십시오. 모든 오류 플래그를 검사 할 때 더 좋습니다. 그리고'std :: cin'을 재사용하지 말고 자신의'std :: istream'을 만드십시오. – rubenvb

6

getchar() stdin (표준 입력)에서 읽으므로 호출 읽기는 사용자가 문자를 입력 할 때까지 기다렸다가 Enter 키를 누릅니다. cin이 파일의 끝에 도달하면 루프 조건을 변경하여 읽기를 중지하십시오.

편집 또한 입력 및 출력 스트림에 대해 다른 이름을 사용해야합니다 - std 네임 스페이스에 cincout 이미있다.

7
using namespace std; 

ifstream cin("input.txt"); 
ofstream cout("output.txt"); 

실제 std :: cin과 std :: cout ...을 숨기고 나중에 읽습니다.

while ((c = getchar()) != EOF) { 

여기 실제 std :: cin을 사용하여 EOF를 확인합니다.

1

while 루프 조건에서 getchar()을 사용했기 때문입니다. 당신이 뭘 하려는지 모르지만 getchar()은 stdin에서 char을 읽습니다. cin이 실패했거나 EOF가 발생했는지 확인해야합니다.

0

. 빌드 오류가 발생하여 거기에서 약간의 오류가 발생했습니다.

희망이 도움이됩니다.

#include <iostream> 
#include <fstream> 
using namespace std; 

int main() { 

    ifstream indata("input.txt"); 
    if(!indata) 
    { // file couldn't be opened 
     cerr << "Error: input.txt could not be opened" << endl; 
     exit(1); 
    } 

    ofstream output("output.txt"); 
    if(!output) 
    { // file couldn't be opened 
     cerr << "Error: output.txt could not be opened" << endl; 
     exit(1); 
    } 

    int ID, I, J; 
    char First[10], Last[10]; 

    output << "ID\tName\tTotal\n"; 
    while (!indata.eof()) 
    { 
     indata >> ID >> First >> Last >> I >> J; 
     output << ID << " " << First << " " << Last << " " << I * J << endl; 
    } 

    indata.close(); 
    output.close(); 

    return 0; 
}