我是否错误地使用了fscanf?

A.S*_*.Sh 0 c file scanf matrix

我在C中进行一些编码以进行分配,并遇到了一个奇怪的问题.我将以下内容保存在txt文件中:

11
1 1 0 1 0 0 0 1 0 0 0 
0 1 1 0 1 0 0 0 1 0 0 
0 0 1 1 0 1 0 0 0 1 0 
0 0 0 1 1 0 1 0 0 0 1 
1 0 0 0 1 1 0 1 0 0 0 
0 1 0 0 0 1 1 0 1 0 0 
0 0 1 0 0 0 1 1 0 1 0 
0 0 0 1 0 0 0 1 1 0 1 
1 0 0 0 1 0 0 0 1 1 0 
0 1 0 0 0 1 0 0 0 1 1 
1 0 1 0 0 0 1 0 0 0 1
Run Code Online (Sandbox Code Playgroud)

它只是一个零和一的方阵,顶部的数字11是矩阵的维数.我使用以下代码片段阅读此文件:

void generateCNF(FILE* f, FILE* g){
    int n;
    fscanf(f,"%d",&n);
    int i,j;
    int A[n][n]; // A is where I store my matrix
    for(i=1;i<=n;i+=1){
        for(j=1;j<=n;j+=1){
            fscanf(f,"%d",&A[i][j]); 
            printf("%d ",A[i][j]); // I print out A while reading into it
        }
        printf("\n");
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

这是printf生成的输出:

0 1 1 0 1 0 0 0 1 0 0 
0 0 1 1 0 1 0 0 0 1 0 
0 0 0 1 1 0 1 0 0 0 1 
1 0 0 0 1 1 0 1 0 0 0 
0 1 0 0 0 1 1 0 1 0 0 
0 0 1 0 0 0 1 1 0 1 0 
0 0 0 1 0 0 0 1 1 0 1 
1 0 0 0 1 0 0 0 1 1 0 
0 1 0 0 0 1 0 0 0 1 1 
1 0 1 0 0 0 1 0 44 0 1606415088
Run Code Online (Sandbox Code Playgroud)

我不知道那些最后的条目是如何错误的.我尝试用文本编辑器中的矩阵打开文件,它看起来非常好,所以我怀疑fscanf(或者更确切地说,我使用它)有些不对劲.

我可以添加完整的C文件(大约90行),如果有必要帮助我,但我不想不必要地混乱帖子.

Kei*_*h M 5

您正在索引超出矩阵的范围.如果你没有崩溃,你可能会得到垃圾,因为你写的是你不拥有的记忆.C中的数组和矩阵是零索引的,因此大小为n乘n矩阵的索引为0到n-1.

for(i=1;i<=n;i+=1){
    for(j=1;j<=n;j+=1){
Run Code Online (Sandbox Code Playgroud)

应该

for(i=0;i<n;i+=1){
    for(j=0;j<n;j+=1){
Run Code Online (Sandbox Code Playgroud)