sscanf替换以前的值

时间:2014-02-10 15:04:58

标签: c arrays multidimensional-array scanf

提前感谢您的帮助。我有一个问题,使用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值。

这可能是我无法注意到的愚蠢,对不起,如果是这样的话。

感谢您的帮助。

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]

尝试打印元素的地址以查看正在发生的事情。