2014-12-20 44 views
-1

因此,對於最近的一個USACO問題,用戶必須在第一行讀入帶有列行的文件,然後再讀取包含一系列#或s的行。當使用C來嘗試這樣做時,我發現存儲文件內容的數組在第5行文件的第4行中間過早結束。執行時沒有錯誤。爲什麼這個循環提前結束?

#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 
... 
#.. 
... 
..# 
.## 

輸出是:

... 
#.. 
... 
.. 

第一行是一個新行,但代碼塊犯規爲什麼代碼停止早期表現出來

? EDITS:

當我打印N和M時,我得到5和3 我正在使用2d數組,因爲您必須根據位置執行計算。問題是:http://usaco.org/index.php?page=viewproblem2&cpid=488

我也不知道怎麼來評論

+2

print'N' and'M'並說出輸出是什麼 – Rizier123

+0

如果你正在閱讀字符,爲什麼不使用字符數組? –

+4

新線路怎麼樣?看起來你有新的線字符(5行)。 '\ n'代碼被讀爲下一個字符'%c'。即使在每行的末尾都可以有'\ r \ n'(另外2個字符)。 – i486

回答

0

\n迴應也是char,由fscanf讀取。要跳過\n試試這個:

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

和內循環後使用printf("\n");聲明。

+0

是的,這工作。那麼格式化之前的空格可以跳過任意數量的空格?那很有用。這是爲什麼? –

+0

不可以。這隻適用於'%c'。不適用於其他格式規範。 – haccks