因此,對於最近的一個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。
我也不知道怎麼來評論
print'N' and'M'並說出輸出是什麼 – Rizier123
如果你正在閱讀字符,爲什麼不使用字符數組? –
新線路怎麼樣?看起來你有新的線字符(5行)。 '\ n'代碼被讀爲下一個字符'%c'。即使在每行的末尾都可以有'\ r \ n'(另外2個字符)。 – i486