0

所以我已经解决这个问题几个小时了,我不知道出了什么问题。如果调用的 int 是有效的,则此函数返回 true 或 false。当我调用一个 1 位长的有效数字时,“0”或“1”返回 true。但是,当我调用一个大于 1 位的数字(例如应该返回 true 的“83”或“955”)时,即使它应该返回 true,它也总是返回 false!

我的验证器功能:

int isRegistered(FILE* file, int area) {

int areaDigit = 0;
int check = 0;

while(fscanf(file, "%d %*[^ ] %*[^\n]", &areaDigit) != EOF)
{
     if (area == areaDigit)
       check = 1;
}

return check;

以及调用该函数的代码:

  for ( i = 0; i < areaCounter; i++)
    {
    cout << areaInt << endl;
    areaCheck = isRegistered(file, areaInt);

    if (areaCheck != 1)
        areaInt = areaInt * 10 + areaIntA[i+1];
    }

如果 areaIntA[3] 的值 = 955,则循环调用 9,然后是 95,然后是 955,直到它不再有要调用的数字。955 应该返回 true,因为该值是 true,但由于某种原因它返回 false。

当我调用为真的“0”或“1”时,它返回真,但对于任何大于 1 位的数字,它总是返回假。有谁知道为什么?

4

1 回答 1

2

该函数isRegistered将文件读取到其末尾,并且您永远不会倒回它。第一次调用isRegistered工作正常,但下一次调用永远不会进入while循环,因为fscanf返回 EOF。

如果isRegistered要搜索整个文件,请尝试以下操作:

int isRegistered (FILE * file, int area)
{
    int areaDigit = 0;

    rewind (file);  // Go to beginning of file and clear flags

    while (fscanf (file, "%d %*[^ ] %*[^\n]", &areaDigit) != EOF)
        if (area == areaDigit)
            return 1;

    return 0;
}
于 2013-02-07T07:33:07.060 回答