2010-05-10 4 views
0

나는이 코드를 어제 작업했지만, 편집 한 것처럼 보이고 작업 버전을 잃어 버렸습니다. 나는이 일을 더 이상 할 수 없다.프로그램이 파일에서 행렬을 스캔 할 때마다 한 행을 건너 뜁니다!

기본적으로 .txt 파일에서 행렬을 스캔하고 싶습니다. 예를 들어

for(i=0;i<=test->rowmat1;i++){ 
     for(j=0;j<=test->colmat1;j++){ 
     fscanf(fin,"%f\t",&test->mat[i][j]);         
     } 
    fscanf(fin,"%*[^\n]",&test->mat[i][j]); 
    } 

의 매트릭스 :

하지만 첫번째 행을 스캔마다, 두 번째는 생략되고, 그 대신에 제 판독 :(

여기

내 코드 내가 3 행 3 COLS을 추출 할 경우

1.00 2.00 3.00  
4.00 5.00 6.00  
7.00 8.00 9.00  
10.00 11.00 12.00 

, 내가 얻을 :

1.00 2.00 3.00 
7.00 8.00 9.00  

는 그런 실패

, 그것은이 SECON 건너 뛸 싶어 d 행은 있지만 이후에는 아무 것도 없음 10 11 12

왜 작동이 멈췄습니까? 내가 뭘 잘못 했니?

@Derek는 : 사전에 도와주세요 S

감사합니다 : 두 번째는 scanf를 제거, 나는

1.00 2.00 3.00  
4.00 5.00 6.00  
7.00 8.00 9.00  
10.00 11.00 12.00 

1.00 2.00 3.00  
5.00 6.00 7.00 
9.00  10.00 11.00 

마지막 숫자를 건너 3 매트릭스 3를 추출 얻을.

+0

test-> rowmat1 = 3이고 test-> colmat1 = 3이면 3이 아닌 4 개의 값을 읽습니다. –

+0

@Kinopiko, 답장을 보내 주셔서 감사합니다. 정확히 무슨 뜻입니까? 4 개의 값을 어떻게 읽습니까? 3과 3에서 3 개의 값을 읽습니다 : S – NLed

+0

'i = 0; i = 0, 1, 2 및 3에 대해서는 i <= 3'이 참이므로 4 개의 값을 읽습니다. –

답변

2

전문가가 아닙니다. 하지만 내부 루프 다음에 두 번째 fscand()를 수행 할 때 j는 3이 아닌 3이 될 것입니다. 2. fscanf()에 어떤 영향을 줍니까?

+0

시간을 몇 번 고치려고 시도했습니다 ... 모든 경우에 대해 작동하지 않았습니다. – NLed

1

문제는 루프 경계라고 생각합니다. 아마도 test-> colmat1은 3입니다. 왜냐하면 여러분은 3 개의 열이있는 행렬을 읽고 있기 때문입니다. 하지만 j = 3의 경우 j < = 3이 true이므로 내부 루프가 네 번 실행됩니다. 따라서 내부 fscanf()는 네 번 실행되어 두 번째 행의 첫 번째 값을 건너 뜁니다. 그런 다음 바깥 쪽 fscanf()가 실행되고 "\ n"까지 읽히므로 두 번째 줄은 모두 무시됩니다.

은 아마 대신

j<=colmat 

j<colmat 

에 루프 경계를 설정하는 문제를 해결합니다. 또는 colmat 대신 test-> colmat를 사용하는 경우에도 마찬가지입니다.

또한 j 루프 외부의 j를 사용하면 약간 위험합니다.

관련 문제