2014-11-12 2 views
0

저는 몇 시간 동안이 문제를 해결하기 위해 노력했으며 도움을 받고 싶습니다. 내일 예정된 프로그램이 있습니다. 기본적으로 성 및 이름이있는 입력 파일이 있고 그 다음 네 개의 부동 소수점 숫자가 있습니다. 이것은 다음과 같습니다 :C++에서 getline을 사용하여 숫자와 이름을 읽으시겠습니까?

John W. 
Smith 
78.8 56.5 34.5 23.3 
Jane 
Doe 
34.5 23.4 35.7 87.0 
No 
More 

포인터의 배열로 이름과 성을 읽어야합니다. 지금까지 나는 각 행에서 변수 "name"을 읽으려고하고 텍스트 파일로 출력하여 데이터를 올바르게 읽었는지 확인하려고합니다. 불행히도, 플로트를 읽은 후에 멈추고, 다음 이름에서는 읽지 않습니다.

char *newPtr;    
char *nameList[50] = {0}; 
char name[15]; 
int i = 0; 
infile.getline(name, 15); 

while (strcmp (name, "No") != 0) 
{ 
    newPtr = new char[15]; 
    strcpy(newPtr, name); 
    nameList[i] = newPtr; 
    infile.getline(name, 15); 
    outfile << name << endl; 
    i++; 
} 

지금까지 출력이 단지되었습니다

존 W.

스미스

78.8 56.5 34.5 23.3

편집 : 루프는 현재 무한하지만,에서 내 결과물, 나는 아직 두 번째 이름을 실제로 처리하지 않았다는 것을 안다. 나는 첫 번째 숫자에서 멈춘다.

도움을 얻을 수 있다면 좋을 것입니다. 나는 내가 사용할 수있는 함수에 매우 제한되어있다. 나는 getline 함수를 사용해야한다고 확신한다. 나는 아무것도 사용할 수 없다.

char *newPtr; 
char *NameList[6] = {0}; 
char Name[20]; 
int a = 0; 
infile.getline(Name, 20); 
while(strcmp(Name, sentinel) != 0) 
{ 
newPtr = new char[20]; 
strcpy(newPtr,Name); 
NameList[a++] = newPtr; 
infile.getline(Name,20); 
} 

우리는 아직 문자열에 대해 가르쳐되지 않았으며 나는 우리가 이야기하지 않은 것을 사용할 수 없습니다 확신 :

그녀의 슬라이드에서

, 선생님은 이름에 읽는 우리를 돕기 위해이 코드를 가지고 클래스. 지금까지 의견을 주신 모든 분들께 도움을 주셔서 감사합니다.

+0

문제가 아니지만 메모리가 있습니다 while 루프에서 누출. 왜'std :: string'이 아닌 char 배열을 사용하고 있습니까? 또한 첫 번째'strcmp '는 할당되었지만 초기화되지 않은'name' (null 종료 문자가 없음을 의미)을 비교합니다. –

+0

내 선생님이 수업에서 어떻게하는지 알려주는 방법입니다. 나는 또한 매우 혼란 스럽다. – kmd12

+1

선생님이하라고 말씀하신 것에 대해 혼란 스럽다면 아마 그와 이야기해야할까요? –

답변

0

거의 다 왔어. 중요한 것은 당신이 그 숫자를 읽으려고하는 것을 잊었다는 것이다. 아래 코드는 그들을 w, x, yz 개로 읽었지만 무시한 다음 무시합니다. 아마도성에 대한 두 번째 배열과 float에 대한 세 번째 2 차원 배열 또는 4 배 길이의 1 차원 배열을 만듭니다 ....

char *nameList[50] = {0}; 
char name[15]; 
int i = 0; 

while (infile.getline(name, sizeof name) && strcmp(name, "No") != 0) 
{ 
    char* newPtr = new char[sizeof name]; 
    strcpy(newPtr, name); 
    nameList[i] = newPtr; 
    double w, x, y, z; 
    if (infile.getline(name, sizeof name) && infile >> w >> x >> y >> z) 
     outfile << name << endl; 
    else 
    { 
     std::cerr << "missing rest of data for " << nameList[i] << " found\n"; 
     exit(EXIT_FAILURE) 
    } 
    i++; 
} 
관련 문제