因此,对于最近出现的USACO问题,用户必须在第一行读取带有Row Col的文件,然后在其后面添加一系列#'s或#。 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 我正在使用二维数组,因为您必须根据位置执行计算。问题是:http://usaco.org/index.php?page=viewproblem2&cpid=488。
我也不知道如何回应评论
答案 0 :(得分:0)
\n
也是char
,由fscanf
读取。要跳过\n
,请尝试以下操作:
fscanf(fin," %c", &c);
// ^A space before %c can skip any number of white-spaces
并在内循环后使用printf("\n");
语句。