2011-11-08 7 views
2

매우 구체적인 질문입니다. 나는 유닉스 컴퓨터에서 g ++ 컴파일러를 사용하여 C++ 코드를 컴파일하고있다.C++ 유닉스에서 파일 읽기/쓰기

./test file.txt 

그러나 : 나는로 호출, ++ g로 컴파일 한 후 test.cc 이제

int main(int argc, char *argv[]) 
{ 

    ifstream inputfile(argv[1]); 

} 

: 나는 텍스트 ++ C에서 매개 변수로 지정된 파일을 읽을 수있는 다음과 같은 한 줄의 코드를 내가

한마디로
./test <file.txt 

로 호출 할 경우 나는 어떻게 파일이 기본 입력/출력을 사용하여 읽기해야합니까, 어떻게해야

+0

http : // stackoverflow.com/q/7789007/14065 –

+0

당신은'stdin'이나'inputfile' 대신에 읽는 것을 의미합니까? –

답변

7

main의 인수를 확인하여 프로그램에 인수가 있는지 확인해야합니다. 그러면 파일로 사용할 수 있습니다. 그렇지 않으면 std::cin을 사용합니다.

void do_something(istream &input) 
{ 
    // Read some stuff from the input 
} 

int main(int argc, char *argv[]) 
{ 
    if (argc == 1) 
     do_something(cin); 
    else if (argc == 2) 
     do_something(ifstream(argv[1])); 
    else 
    { 
     cout << "Error: Must supply a file\n"; 
     return 1; 
    } 
} 

내가 입력을 읽고 처리하는 또 다른 함수를 호출하는 이유 당신이 스트림을 할당 할 수 없습니다 만, 참조 또는 포인터를 사용해야하기 때문이다 : 여기

은 예입니다. 코드의 가독성을 높이기 때문에 별도의 작업을 별도의 함수에 넣는 것도 좋습니다.

+0

요아킴, 그냥 쿼리입니다. 위 코드를 사용하면, 컴파일 된 프로그램을 ./으로 실행하면됩니다. test user1035927

+2

@ user1035927 예. 어서 해봐. :) –

0

<을 사용하면 해당 파일이 stdin으로 리디렉션되므로 C++의 std :: cin을 통해 얻을 수 있습니다.

0

대신 stdin, da 파일에서 읽어야합니다.

다른 말로하면 키보드에서 읽습니다.

파이프를 채우면 마치 키보드에서 입력 한 것처럼 읽혀집니다.

1

표준 입력에서 읽으려면 자체 스트림을 여는 대신 std::cin을 사용하십시오. 예를 들어

:

std::string s; 
std::getline(std::cin, s); 
0

당신은 유닉스 명령의 대부분이 할 일을 할 수 있습니다 : 파일 이름을 지정하면 파일에서 읽습니다. 파일 이름이 누락 된 경우 표준 입력에서 읽음.

0

cin 개체는 이미 iostream에 정의되어 있습니다. inputfile 대신 cin에서 읽으십시오.

0

아마도

ifstream &myin; 
if (argc>1) { 
    ifstream* inputfilep = new infstream(argv[1]); 
    myin = *inputfile; 
} 
else myin = cin; 
/* do your input on myin */ 
+0

참조는 시공시 초기화해야합니다. 그것을 대신 포인터로 만들거나 조건부'ifstream & myin = (argc> 1? * 새로운 infstream (argv [1]) : cin);'(argc> 1이면 myin을 삭제하는 것을 잊지 말것!) –

+0

네,이게 더 낫습니다. –

0
은 입력 리디렉션 쉘에 의해 벗겨대로는 argc 0 다음 읽을 수있다, 그래서 만약 어떤 명령 줄 인수가 전달되어 있는지는 argc를 확인하기 위해 예를 수정해야합니다

표준에서 다른 예제에 의해 주어진대로, 그렇지 않으면 귀하의 예제 코드로.

0

아무 것도 할 필요가 없습니다. 명령 줄에서 읽는 것처럼 프로그램을 작성하십시오.

관련 문제