1

ファイルから行を読み取り、それが a(n) かどうかを判断するコンピューター プログラミングの課題に取り組んでいます。

  • 不純な回文: 句読点と大文字と小文字を無視します

    例: Madam I'm Adamは不純な回文です。

  • 純粋な回文: 句読点と大文字と小文字をチェックします

    たとえば、星のないライブの邪悪なネズミは、純粋な回文です。

これらの両方のケースに対応する関数を作成しましたが、正常に機能します。

私の問題はファイルを開くことにあります

からファイル名を読み取る関数がありargv[]、不純/純粋な回文の数と行数を計算することを意味します。そして、それはちょっとうまくいきますが!!

入れた関数で出力を確認すると、printfgets が使用されているときにファイルのアドレスが含まれていると思います。それ以外は正常に動作します。私のコードは、ファイル名をハードコードしても機能します。ポインターとメモリアドレスに関係があると思いますが、困惑しています。

これと同様の質問を読みましたが、op が解決できたため、回答は提供されませんでした。

リンクは次のとおりです:fopenを使用して関数内でファイルを開く

この質問に純粋な回文関数と不純な回文関数を含める必要はないと思いました。私が間違っている場合は、喜んでそれらを含めます。

私のファイル読み取り機能:

void read_file(const char* filename)
{
bool impure = false;
bool pure = false;

int purecount = 0;
int impurecount = 0;
int linecount = 0;

FILE *file = fopen(filename, "r");
if (file != NULL)
{
    char line[FILE_LEN];
    char line1[FILE_LEN];

    while (fgets(line, sizeof line, file) != NULL)
    {
        printf("%s\n", line);
        sscanf(line, "%[^\n]", line1);
        pure = is_a_pure_palindrome(line1);
        impure = is_an_impure_palindrome(line1);
        printf("%s\n", line);

        if (pure == true)
            purecount++;
        else if (impure  == true)
                impurecount++;

        linecount++;
    }
    fclose(file);

    printf("There are %d pure palindromes and %d impure palindromes and %d lines\n", purecount, impurecount, linecount);
}
else
{
    perror("fopen");
}

return;
}  

私の主な機能:

int main(int argc, char *argv[])
{
        int i = 0;
        for (;i< argc; i++)
        {
            read_file( argv[i]);
        }
        return EXIT_SUCCESS;
}
4

1 に答える 1

3

argv[0]プログラムの実行パス名を表します。C/C++ の引数は 1 から始まります。

への変更:

int i = 1;
for (;i< argc; i++)
{
    read_file( argv[i]);
}
于 2012-10-24T23:53:47.540 に答える