0

したがって、私はこの問題に数時間取り組んでおり、何が問題なのかわかりません。呼び出された int が有効な場合、この関数は true または false を返します。1桁の長さの有効な番号を呼び出すと、「0」または「1」がtrueを返します。しかし、「83」や「955」のように真を返すはずの1桁以上の数字を呼び出すと、真を返すはずなのに常に偽を返します!

私のバリデータ機能:

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 を返しています。

true の '0' または '1' を呼び出すと、true が返されますが、1 桁より大きい場合は常に false が返されます。理由を知っている人はいますか?

4

1 に答える 1

2

この関数isRegisteredはファイルを最後まで読み取り、巻き戻すことはありません。への最初の呼び出しは正常に機能しますが、 EOF を返すため、次の呼び出しはループisRegisteredに入りません。whilefscanf

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 に答える