提前感谢您的帮助。我有一个问题,使用sscanf扫描txt的某些值,找不到类似已发布的类似内容。这就是我正在阅读的txt:
1 NAME 211.505 42.63
2 NAME 335.475 42.63
3 NAME 449.645 42.63
4 NAME 512.435 42.63
这就是提出问题的部分:
double contacts[N-1][1];
i = 0;
while(fgets(cLine,100,inFile) != NULL) {
sscanf(cLine,"%d %s %lf %lf",
&cNum[i],
cVarName[i],
&contacts[i][0],
&contacts[i][1]);
i++;
}
它在每一步都运行良好,但似乎在i,sscanf取代了i-1值。
这可能是我无法注意到的愚蠢,对不起,如果是这样的话。
感谢您的帮助。
答案 0 :(得分:0)
应声明contacts
数组:
double contacts[N][2];
因为您将其编入索引为contacts[i][1]
;它必须在第二维中至少有2个条目。数组声明指定每个维度中所需的条目数,而不是最高元素的索引。我只是猜测你想在第一个维度中输入N
条目,因为声明N-1
似乎很奇怪,但正如我之前指出的那样,你对循环没有约束,所以很难说
C不执行数组边界检查,因此通过将数组声明为在第二维中只有1个元素,您会发现:
&contacts[i][1] == &contacts[i+1][0]
因此,对于第一次迭代后的每次迭代,每次存储到contacts[i][0]
时,您将覆盖contacts[i-1][1]
。最后一次迭代会将contacts[i][1]
存储在contacts[i+1][0]
。
尝试打印元素的地址以查看正在发生的事情。