读取文件 - 逐行创建c中的排列

时间:2017-05-30 01:16:45

标签: c io permutation

因此我在尝试阅读由三行组成的文本文件时遇到问题。我试图读取每一行并创建每行的排列。我想继续循环执行此操作到每一行,直到我点击EOF。我试图在我的主要的while循环中实现fgets。我是在正确的轨道上吗?我遇到的主要问题是在我的主要文件中将char传递给我的排列方法。

#include <stdio.h>

void swap(char *x, char *y)
{
    char tempVariable;

    tempVariable = *x;
    *x = *y;
    *y = tempVariable;
}

void stringPermutation(char *a, int zeroVariable, int factorial)
{
    int i;

    if(zeroVariable == factorial)
    {
        printf("%s\n", a);
    }
    else
    {
        for(i = zeroVariable; i <= factorial; i++)
        {
            swap((a + zeroVariable), (a + i));
            stringPermutation(a, zeroVariable + 1, factorial);
            swap((a + zeroVariable), (a + i));
            }
        }
    }

int main(int argc, char *argv[])
    {
    if(argc != 2)
    {       
        printf("ERROR - WRONG AMOUNT OF ARGUMENTS\n");

    }
     else
    {   
        FILE *file = fopen(argv[1], "r");
        int x;

        printf("PERMUTATIONS:\n");

        while((x = fgetc(file)) != EOF)
        {   
            stringPermutation(x, 0, x - 1); //I'm messing up here
        }
        fclose(file);
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

stringPermutation(x, 0, x - 1);

x属于int类型,获取char的ASCII代码作为值,但函数stringPermutation需要char *a

我建议使用fgets来读取文件的行。

答案 1 :(得分:0)

stringPermutation()期待char*不是charint。 您正在通过char。看起来stringPermutation也将参数用作char*,因此在这种情况下调用者是错误的。

看起来您需要将几个字符读入缓冲区并将缓冲区传递给stringPermutation()。更简单地使用fgetsgetline等在一次调用中读取字符串,而不是自己用char构建char。