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