C语言 函数中使用的fopen在字符串中包含文件地址

aor9mmx1  于 2023-03-22  发布在  其他
关注(0)|答案(1)|浏览(94)

我正在做一个计算机编程作业,从一个文件中读取行,并确定它是否是一个(n):

  • 不纯回文:忽略标点符号和大小写

例如:Madam I'm Adam 是不纯的回文。

  • 纯回文:检查标点符号和大小写

例如 evil rats on no星星live 是一个纯回文。
我已经为这两种情况创建了函数,它们工作得很好。
我的问题在于打开文件
我有一个从argv[]中读取文件名的函数,它的意思是计算不纯/纯回文的数量和行数。它也有点工作,但!!
当我用我放进去的printf函数检查输出时,我相信当使用gets时,文件的地址被包含在其中。除此之外,它工作得很好。当我硬编码一个文件名时,我的代码也工作得很好。我认为这与指针和内存地址有关,但我被难倒了。
我读过一个类似的问题,但没有提供答案,因为操作能够解决它。
下面是链接:Opening a file inside a function using 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;
}
omqzjyyz

omqzjyyz1#

argv[0]表示程序执行路径名,C/C++中参数从1开始。
变更为:

int i = 1;
for (;i< argc; i++)
{
    read_file( argv[i]);
}

相关问题