为什么这个循环提前结束?

时间:2014-12-20 22:41:27

标签: c

因此,对于最近出现的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

我也不知道如何回应评论

1 个答案:

答案 0 :(得分:0)

\n也是char,由fscanf读取。要跳过\n,请尝试以下操作:

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

并在内循环后使用printf("\n");语句。