c++ - 验证值的函数在调用 1 个数字时返回 true,但当调用 2 个或更多数字时即使它为 true 也返回 false

标签 c++

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

我的验证器函数:

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 位的数字,它总是返回假。有人知道为什么吗?

最佳答案

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;
}

关于c++ - 验证值的函数在调用 1 个数字时返回 true,但当调用 2 个或更多数字时即使它为 true 也返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14745610/

相关文章:

c++ - 析构函数 C++ 中的异常

C++ 精确除法会失去精度吗?

c++ - 如何设置 sscanf() 以忽略字符串开头的字符?

c++ - 超过 8 个元素的动态数组崩溃

c++ - QTreeView 子节点总是指向第一个顶级节点

c++ - 如何将元组扩展为可变参数模板函数的参数?

c++ - Sieve Of Eratosthenes 删除列表元素

python - Python中的函数和C++中的函数有什么区别?

c++ - 在 O(1) 上运行的内存池

c++ - 优先队列和dijkstra