2017-05-30 1 views
0

So habe ich Probleme beim Versuch, eine Textdatei aus drei Zeilen zu lesen. Ich versuche, jede Zeile zu lesen und Permutationen pro Zeile zu erstellen. Ich möchte damit fortfahren, dies bis zu jeder Zeile zu tun, bis ich auf EOF stoße. Ich versuche, Fgets innerhalb der While-Schleife in meinem Haupt zu implementieren. Bin ich auf dem richtigen Weg? Das Hauptproblem, das ich habe, ist, einen Char an meine Permutationsmethode in meinem Haupt zu übergeben.Datei lesen - Zeile für Zeile zum Erstellen von Permutationen in 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

Nun, Sie übergeben ein 'char', wo ein' char * 'erwartet wird. Dein Compiler sollte dir das gesagt haben ... – John3136

+0

Ich verstehe, dass int x in einen Parameter übergeben wird, der ein char sein muss ... ich denke, meine Frage ist ... wie mache ich diesen int zu einem char? es werfen? Ich habe gelesen, dass fgets Zeile für Zeile liest, aber es stoppt bei \ n oder EOF ..? –

+0

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

Antwort

0

stringPermutation() erwartet ein char* nicht ein char oder ein int. Sie übergeben eine char. Es sieht so aus als ob stringPermutation den Parameter auch als char* benutzt und so ist in diesem Fall der Aufrufer falsch.

Sieht so aus, als müssten Sie ein paar Zeichen in einen Puffer schreiben und den Puffer an stringPermutation() übergeben. Einfacher verwenden Sie fgets oder getline etc, um eine Zeichenfolge in einem Aufruf zu lesen, anstatt es char durch char selbst aufzubauen.

+0

Danke, dass du dir die Zeit genommen hast, mir zu helfen. Ich werde versuchen, was Sie gesagt haben und sehen, ob das funktioniert –

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

x vom Typ int, wird ASCII-Code von char als Wert, sondern die Funktion stringPermutation erwartet char *a

I fgets Verwendung empfehlen, für Zeilen einer Datei zu lesen.

+0

Ich bekomme den Eindruck, ich brauche fgets ... danke –

Verwandte Themen