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行),如果有必要帮助我,但我不想不必要地混乱帖子.
您正在索引超出矩阵的范围.如果你没有崩溃,你可能会得到垃圾,因为你写的是你不拥有的记忆.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)
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |