2013-08-22 2 views
0

텍스트 파일의 데이터를 매트릭스로 읽으려고합니다. 텍스트 파일은 다음과 같습니다.텍스트 파일을 매트릭스로 읽는 문제가 발생했습니다.

Object data 
Format 6 
1 5241.365147 -77215.356982 248612.514352 0.000014 0.000009 0.000051 
2 5242.871592 -77213.351692 248614.103512 0.000013 0.000008 0.000052 
... 

나는이 사이트의 이전 답변에서 유사한 문제를 검색하고 다음 코드를 작성했습니다.

#include <iostream> 
#include <fstream> 
#include <vector> 

using namespace std 

int main() 
{ 
// Initialize variables 
int i, j, i_max, j_max; 
i_max = 7; 
j_max = 4; 

//Open the input file 
ifstream infile; 
infile.open ("data.txt"); 

//Loop through the values in the text file 
double data [i_max][j_max]; 
for (i=0; i<i_max; i++) { 
    for (j=0; j<j_max; j++) { 
     infile >> data[i][j]; 
     printf ("%d\n", data[i][j]); //Check the input 
    } 
} 

return 0; 
} 

제가하는 데 문제는 I 입력을 확인할 수있어 사용의 printf 문 만 단말기 j_max의 값을 기록하는 것이다. 어떤 도움을 주시면 감사하겠습니다.

답변

1

수정 : -이

또한
i_max = 4; //this is no. of rows 
j_max = 7; // this is no. of cols 

std::string dummy; 
getline(infile,dummy); //Skip 1st line "Object data" 
getline(infile,dummy); //Skip 2nd line "Format 6" 

double data [i_max][j_max]; 
for (i=0; i<i_max; i++) { 
    for (j=0; j<j_max; j++) { 
     infile >> data[i][j]; 
     // Use %f format specifier for floats 
      printf ("%f\n", data[i][j]); 
    } 
} 

, C++

+0

도움 주셔서 감사합니다. 내가 C와 C++을 어떻게 혼합했는지 지적 해 주시겠습니까? – Ryan

0

정말이 부분이 입력 파일에 포함됩니까?

Object data 
Format 6 

그래서, 그냥 같은 그 라인을 건너 뛸 :

char s[10]; 
infile.getline(s, 5); 
infile.getline(s, 5); 

나는 그것에 전체 행에서 첫 5 문자를 복사 할 문자 배열을 "s"를 사용했다. getline()을 호출하면 판독기가 모든 행을로드하므로 읽은 행의 양이 아무리 많아도 모두 건너 뜁니다. getline 함수를 사용할 수 있도록 선언했는지 확인하십시오.

#include <string.h> 

내가 도와 주 었는지 알려주십시오.

+0

가 왜의''#INCLUDE 필요합니까 C &를 함께 사용하지 마십시오? 왜's '에 5 글자 만 읽어야합니까? 또한 파일의 처음 2 줄을 잃어 버리지 않고's'의 데이터 형식을 지정하는 대체 코드를 게시하는 것이 좋습니다. –

+0

예, 확실합니다. 나는 움직이고 있었다 ... s는 char 데이터 타입을 가지고있다. 더 명확하게하기 위해서 : 나는 전체 행의 처음 5 문자를 복사하기 위해 그것을 사용했다. getline()을 호출하면 판독기가 모든 행을로드하므로 읽은 행의 양이 아무리 많아도 모두 건너 뜁니다. –

+1

그래도,'#include '? 또한 [this] (http://stackoverflow.com/a/18381049/2339141)에서 당신이 갖고있는 격차를 보아라. –

0

데이터 파일 구문 분석 및 누락 된 세미콜론을 제외하고 문제는 printf입니다. "d"는 int의 형식 코드이지만 double을 전달합니다. "g"를 사용해야합니다. 또는 더 나은 아직, std C++ 스트림.

경고를 켜면 GCC에서이를 알려줍니다. 일반적으로 "-Wall -Wextra"또는이 특별한 경우 "-Wformat"을 사용하십시오. 다음과 같이

+0

추가 디버그 기능으로 경고를 켜는 힌트를 주셔서 감사합니다. – Ryan

관련 문제