2014-02-21 5 views
0

두 가지 질문이 있습니다. 파일에서 줄 단위로 읽으려고하고 있지만 각 줄을 개별적으로 사용할 수는 없습니다. 또한 사용자에게 파일 이름을 요청하는 방법과 프로그램에서 입력하는 내용을 사용하는 방법을 이해할 수 없습니다. 내가 찾은 모든 예제는 코드에있는 파일의 이름을 이미 가지고 있으며 단지 cin에 넣는 것이 효과가없는 것 같습니다. 두 개의 다른 유형의 줄을 분리하려고합니다. 예를 들어, abcd와 1234입니다. 첫 번째 값이 문자 인 경우 a, 숫자 인 경우 b를 수행하십시오. 하지만 내가 할 수 있었던 모든 것은 getline에 모든 것을 포함 시켜서 실제로 분리 할 수는 없다는 것입니다. 누구든지 조언을하나요?파일에서 각 행을 읽는 방법 C++

string x; 
cout << "Enter your file: " ; 
cin >> x 
string line; 
ifstream myfile; 
myfile.open (x); 
while(!myfile.eof()) 
{ 
    getline(myfile,line, ' '); 
} 
cout << line << endl; 
+2

@ πάνταῥεῖ이 부분은 중복되지 않습니다. 그는 어쨌든 실제 문제가 무엇인지 명확하지 않습니다. – 0x499602D2

+1

@ 0x499602D2 정직하게 말하면, 나는 속는 사람을 찾고 있었고 정말로 일치하는 (높은 표를 얻은 것) 것을 발견 할 수 없었습니다. 비록 내가 지금 참여하고 있기 때문에 나는이 동일한 질문/문제를 100 번 이상 보았을 것이라고 확신하지만. –

답변

1

첫째, while 상태 eof()을 넣지 마십시오. iostream::eof은 스트림의 끝 부분을 읽은 후에 만 ​​설정되므로 잘못되었습니다. 다음 읽기가 스트림의 끝임을 나타내는 것은 아닙니다. 이 게시물을 확인하십시오 : Why is iostream::eof inside a loop condition considered wrong?

분리하려면 ['0', '9'] 내에 있는지 여부를 확인하려면 먼저 char 행을 확인하십시오. 이처럼

:

파일 이름을 읽기위한 당신의 cin 문 아무 문제가 없습니다
while(getline(myfile, line)) 
{ 
    if (line[0]>='0' && line[0]<='9') 
    { 
     // start with a number (do case b) 
    } 
    else 
    { 
     // other (do case a) 
    } 
} 
+0

이전 대답을 삭제하고 다시 응답하면 안됩니다. –

+0

@ZacHowland Noted. 앞으로도 따라 올거야. 감사. – herohuyongtao

+0

그게 문제 였어, 고마워. :) – Jen

3

. 파일이 존재하는 한 가지고있는 파일이 열립니다. 비록, 당신은 그것을 확인하는 몇 가지 오류에 추가 할 수 있습니다 (! std::istreamwhile 조건 eof()를 사용하지 않는) 적절한 while 조건이

std::string x; 
std::cout << "Enter your file: " ; 
if (!(std::cin >> x)) 
{ 
    std::cerr << "Invalid input!" << std::endl; 
    return -1; 
} 

std::ifstream myfile(x); 
if (myfile.is_open()) 
{ 
    std::string line; 
    while (myfile >> line) 
    { 
     std::cout << line << std::endl; 
    } 
} 
else 
{ 
    std::cerr << "Unable to open file: " << x << std::endl; 
    return -1; 
} 

참고. 또한 공백을 구분할 경우 std::getline - operator>>과 같은 작업을 수행 할 필요가 없습니다.

line의 값에 따라 다른 작업을 수행하려면 문자열을 확인하십시오. 예를 들면 다음과 같습니다.

if (line[0] >= '0' && line[0] <= '9') 
    // do something with digits 
else 
    // do something with non-digits 
관련 문제