gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:23:39 27 4
gpt4 key购买 nike

所以我已经解决这个问题几个小时了,我不知道哪里出了问题。如果调用的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com