2014-12-20 4 views
-1

그래서 최근의 USACO 문제의 경우 사용자는 Row Col 파일을 첫 번째 줄에 읽은 다음 그 뒤에 # 또는 s의 줄이있는 줄을 읽어야했습니다. C를 사용하여 이것을 시도 할 때, 파일의 내용을 저장하는 배열이 5 행 파일의 네 번째 행 중간에 중간에 끝나는 것을 발견했습니다. 실행시 오류가 없습니다.이 루프가 일찍 끝나는 이유는 무엇입니까?

#include <stdio.h>  
int main() 
{ 
    FILE *fin = fopen("crosswords.in", "r"); 
    FILE *fout = fopen("crosswords.out","w"); 
    int N, M; 
    fscanf(fin,"%d %d", &N, &M); 
    int arr[N][M]; 
    char c; 
    int i,j; 
    for (i = 0; i < N;i++) { 
     for (j = 0; j < M; j++) { 
      fscanf(fin,"%c", &c); 
      arr[i][j] = c; 
      printf("%c", c); 
     } 
    } 
    return 0; 
} 

이것이 코드입니다. 이 파일은 다음과 같습니다

... 
#.. 
... 
.. 

첫 번째 줄은 줄 바꿈이지만, 코드 블록은 이유는 무엇입니까 코드 정지 일찍에게

을 보여 나던 :

5 3 
... 
#.. 
... 
..# 
.## 

출력은? 편집 :

N과 M을 인쇄하면 5와 3이됩니다. 위치를 기반으로 계산을 수행해야하므로 2 차원 배열을 사용하고 있습니다. 문제는 http://usaco.org/index.php?page=viewproblem2&cpid=488입니다.

나는 또한 의견

+2

'N'과 'M'을 출력하고 출력이 무엇입니까 – Rizier123

+0

왜 문자를 읽는 중 문자 배열을 사용하지 않습니까? –

+4

새 라인은 어떻습니까? 새 줄 문자 (5 줄)가있는 것 같습니다. 그리고'\ n' 코드는 다음 문자'% c'로 읽혀집니다. 각 행의 끝에는 \ r \ n이있을 수 있습니다 (2 문자 더). – i486

답변

0

\n에 응답하는 방법을 모르는 또한 char하고 fscanf 읽습니다.

fscanf(fin," %c", &c); 
//   ^A space before %c can skip any number of white-spaces 

및 내부 루프 후 printf("\n"); 문을 사용 건너 뛰려면 \n이 시도.

+0

네, 그렇습니다. 그래서 포맷 작업 이전의 공백은 공백을 건너 뛸 수 있습니까? 유용합니다. 왜 그런가요? –

+0

아니다. 이것은'% c'에서만 유효하다. 다른 형식 사양에는 적합하지 않습니다. – haccks

관련 문제