2017-05-30 2 views
0

J'ai donc des problèmes pour essayer de lire un fichier texte composé de trois lignes. J'essaie de lire chaque ligne et de créer des permutations par ligne. Je veux continuer à boucler en faisant cela à chaque ligne jusqu'à ce que je frappe EOF. J'essaie d'implémenter des fgets dans la boucle while de mon principal. Suis-je sur la bonne voie? Le principal problème que j'ai est de passer un caractère à ma méthode de permutation dans mon principal.Lire le fichier - ligne par ligne pour créer des permutations dans c

#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; 
} 
+0

Eh bien, vous passez un 'char' où un' char * 'est attendu. Votre compilateur aurait dû vous dire que ... – John3136

+0

Je comprends que int x est passé dans un paramètre qui doit être un char ... je suppose que ma question est ... comment puis-je transformer cet int en un char? le jeter? J'ai lu que fgets lit ligne par ligne, cependant, il s'arrête à \ n ou EOF ..? –

+0

essayez 'char x [] =" abc "; stringPermutation (x, 0, stelen (x) -1); ' – BLUEPIXY

Répondre

0

stringPermutation() attend un char* pas un char ou un int. Vous passez un char. Il semble que stringPermutation utilise également le paramètre char* et, dans ce cas, l'appelant a tort.

On dirait que vous devez lire quelques caractères dans un tampon et passer le tampon à stringPermutation(). Plus simplement utilisez fgets ou getline etc. pour lire une chaîne dans un appel au lieu de la construire par char vous-même.

+0

Merci d'avoir pris le temps de m'aider. Je vais essayer ce que vous avez dit et voir si cela fonctionne –

0
stringPermutation(x, 0, x - 1); 

x est de type int, obtient le code ASCII de char comme valeur, mais la fonction stringPermutation attend char *a

Je suggère d'utiliser fgets pour la lecture des lignes d'un fichier.

+0

J'ai l'impression que j'ai besoin d'utiliser des fgets ... merci –