2010-03-25 2 views
1

저는 대학 프로젝트 중간에 있으며 텍스트 파일 (이 경우에는 "locations.txt")에서 정보를 받아 들일 수있는 방법을 구현하기로 결정했습니다. 텍스트 파일에서 입력이 다음과 같이 표시됩니다txt 파일에서 double 유형으로 읽기 - C++

London 
345 
456 
Madrid 
234 
345 
Beinjing 
345 
456 
Frankfurt 
456 
567 

을 기능은 현재 다음과 같습니다 (그리고 당신은 내가 locations.txt 텍스트의 끝에 도달하면 입력 추가를 완료하는 동안 조건을 잃었 알, 나는 시도 eof 그러나이 didnt 한 직업을 사용한다?!). 또한 함수는 문자를 기대 얻을 그래서 캔트 입력을 허용 ... 위도와 경도로 정의 무엇 인

void populateList(){ 
    ifstream inputFile; 
    inputFile.open ("locations.txt"); 
    temp = new locationNode; // declare the space for a pointer item and assign a temporary pointer to it 


    while(HASNT REACHED END OF TEXT FILE!!) 
    { 
    inputFile.getline(temp->nodeCityName, MAX_LENGTH); 
    // inputFile.get(temp->nodeLati, MAX_LENGTH); 
    // inputFile.get(temp->nodeLongi, MAX_LENGTH); 

    temp->Next = NULL; //set to NULL as when one is added it is currently the last in the list and so can not point to the next 

    if(start_ptr == NULL){ // if list is currently empty, start_ptr will point to this node 

     start_ptr = temp; 
    } 

    else { 
     temp2 = start_ptr; 
     // We know this is not NULL - list not empty! 
     while (temp2->Next != NULL) 
      { 
      temp2 = temp2->Next; // Move to next link in chain until reach end of list 
      } 

     temp2->Next = temp; 
    } 
    } 
    inputFile.close(); 
} 

당신은 가장 유용한 제공 할 수있는 어떤 도움을 더블 이잖아. 내가 더 이상 자세하게 설명 할 필요가 있다면, 나는 떠들썩한 식당에 있고 집중하기가 어렵다 !!

+1

들여 쓰기를 통해 완전히 편집해야합니다. 코드를 이해하기가 어렵습니다. – unwind

답변

4
std::string city; 
double lat, lgt; 

while((inputFile >> city) && (inputFile >> lat) && (inputFile >> lgt)) { 
    // do something with values 
} 
+0

흠,'istream'에 대한 문서에서 볼 수 있듯이 모든'>> '연산은'istream &'을 반환하고'bool'을 반환하지 않습니다 ... –

+0

Ok,'&&'에서'!!'로 변경하면 작동해야합니다. –

+2

@Andreas 스트림에서 부울로의 변환이 있습니다. 스트림 작업이 성공했는지를 테스트하는 표준 방식입니다. –

2

getline() 호출을 while 루프의 조건으로 사용할 수 있습니다. EOF에 도달하면 반환 값은 false로 평가됩니다. 그런 다음 fstream을 사용할 수

2

cin >> str; 같은이 "뉴욕"또는 "호치민 같은 도시 이름의 첫 번째 단어를 읽 때문에 getline()가 중요하다 시티". 크리스토프 (Kristo)가 말했듯이, while 회 돌이 조건에 놓으십시오.

그런 다음 두 가지 가능성이 있습니다. 표준 스트림을 사용하여 이중으로 읽을 수 있습니다.이 경우 모든 적절한 개행을 읽어야합니다. (file >> double_var;은 다음 줄 바꿈 문자를 그대로 둡니다. 따라서 다음은 getline()이 나머지 줄을 얻습니다.이 줄은 다음 줄이 아닌 비어 있습니다.) 이런 종류의 것은 입력이 잘 형성되었다고 확신 할 때 작동합니다. 현실 세계보다 숙제 문제에서 훨씬 더 일반적입니다.

또는 getline()을 사용하여 각 행을 읽고 텍스트를 이중으로 변환 할 수 있습니다. 물론 다양한 방법이 있습니다. C 함수 atod()이 가장 쉽지만 숫자가 0이거나 숫자가 아닌 경우 0을 반환합니다. C 함수 strtod()은 설정하는 것이 더 복잡하지만이 두 경우를 구분합니다. istringstream C++ 솔루션을 사용할 수 있지만,이 경우에는 가치가있는 것보다 훨씬 많은 문제가있는 것처럼 보입니다.

0

나는 당신이 eof로 NOT을 놓쳤다 고 생각합니다. 그것은 다음과 같아야합니다 :

while(!File.eof()); //eof is set when reached end of file. 
// and you are looking for while NOT reached end of file..