2014-04-30 4 views
0

좋아, 내가하려는 것은 텍스트 파일에서 일부 좌표를 읽고 벽돌 배열을 그리는 데 사용하는 것뿐입니다. 이 코드가 있습니다C++의 텍스트 파일에서 좌표를 읽는 것

ifstream infileScenario("scenario1.txt"); 

for (int i = 0; i < NUM_OF_BRICKS; i++) 
{ 
    // read brick coordinates 
    infileScenario >> bricks[i].m_x; 
    infileScenario >> bricks[i].m_y; 
    cout << bricks[i].m_x << " " << bricks[i].m_y << endl; 

    // set brick properties 
    bricks[i].m_height = 0.1; 
    bricks[i].m_width = 0.2; 
    bricks[i].life = 3; 
} 

infileScenario.close(); 

하지만 콘솔에 인쇄 얻고있는 유일한 것은 공의의 무리입니다. 나는 내 코드를 반복해서 점검하고 텍스트 파일을 두 번 점검했는데 내가 잘못 될 곳을 아직도 볼 수 없다.

내 텍스트 파일 scenario1.txt라고하고는 내용이 있어요된다

-0.6 0.7 

-0.3 0.7 

0 0.7 

0.3 0.7 

0.3 0.7 

-0.6 0.5 

-0.3 0.5 

0 0.5 

0.3 0.5 

0.3 0.5 

가 나는 짐작해야한다면, 내 문제의 원인이 될 수있는 것을 생각하는, 자신을이 값을 썼다. 그것은 텍스트 인코딩과 관련이있을 수 있습니까 아니면 내가 이것을 생각하는데 잘못입니까?

+2

'm_x' 및'm_y' 회원 유형은 무엇입니까? – ooga

+0

바라 건데, 텍스트 인코딩은 엉망이되어서 * 평범한 ASCII *는 다시 인코딩해야합니다! 당신은 수레를 읽고 있습니다; 어떤 유형의 변수? 그것들이'int'에 저장되어 있거나'int'로 콘솔에 출력한다면, 당신은 결코 부동 소수점을 볼 수 없을 것입니다. – usr2564301

+0

for 루프는 가치 추출에서 발생하는 거의 보장 된 오류를 뻔뻔스럽게 무시합니다. 파일이 성공적으로 열렸는지 확인하지 않고 값이 성공할 때마다 그 값을 뽑았습니다. – WhozCraig

답변

1

나는 스트림 클래스를 사용하지 말 것을 제안했다. 오류 검사는 좀 더 어렵다. fscanf를 사용하여 오류 검사와 함께 변환 된 동일한 코드가있다.

FILE *infileScenario; 
int i; 

if ((infileScenario = fopen("scenario1.txt", "r")) == NULL) //didnt open readonly 
{ 
    printf("Error, could not open scenario1.txt\n"); 
    exit(-1); //terminate program with a code we can read by running echo $? 
} 
for (i = 0; i < NUM_OF_BRICKS && 
      fscanf(infileScenario, "%lf %lf", 
        &bricks[i].m_x, &bricks[i].m_y) != EOF; 
    i++) 
{ 
    // read brick coordinates 
    printf("%lf %lf\n", bricks[i].m_x, bricks[i].m_y); 
    // set brick properties 
    bricks[i].m_height = 0.1; 
    bricks[i].m_width = 0.2; 
    bricks[i].life = 3; 
} 

fclose(infileScenario); 

또한 g ++ -g -o 다음 gdb를하고 GDB에서 다음을 실행할 수 있습니다 : 당신이 내 솔루션을하지 않은 경우 문제가 될 것으로 보인다 무엇인지 진단 할 수 있도록해야

b main 
r 
s 
(each time the for loop hits bricks[u].life = 3, run) 
p bricks[i] 
(otherwise, keep running) 
s 

그냥 고쳐주세요.

+1

나는 당신의 코드를 시험해 보았지만 그것이 내 문제를 해결하지는 못했지만 즉시 그것이 무엇인지를 강조했다 :로드되지 않도록 텍스트 파일을 올바른 디렉토리에 두지 않았다. 조금 당황 스럽지만 ... 적어도 ifstream을 사용하는 것에 대한 대안을 배웠습니다. – Toemouse

+0

예, fstreams 좀 빨아 ... 그들은 초보자를위한 간단하지만, 당신은 그것을 처리 할 수있는 것처럼 보입니다. – phyrrus9

관련 문제