2016-09-27 4 views
0

Bitte ich hatte eine Menge Probleme damit. Ich habe eine Textdatei mit Tonnen von Zeichen darin und ich muss jedes Zeichen durchlesen, und wenn es ein Buchstabe des Alphabets ist, muss ich es in einem Array speichern.So speichern Sie Zeichen aus einer Datei in ein Array

Bisher habe ich gerade versucht, das Zeichen in mein Array zu setzen, egal ob es ein Alphabet ist oder nicht, aber mein fscanf liest nichts.

Hier ist mein Code

char j = ' '; 
    int i; 

    FILE *file = fopen("text.txt", "r"); 
    for(i = 0; i < 10; i++) 
    { 
     fscanf(file, " %c ", &j); 
     printf(" %c\n", j); //So I could see if j got anything BUT I'M NOT :(
     if((j >= '97' && j <= '122') || (j >= '65' && j <= '90')) 
     { 
     fscanf(file, "%c", &array[i]); 
     } 
    } 

fclose(file); 
return 0; 

Mein Ergebnis? Nichts, nur Leerzeichen. Ja meine Textdatei im selben Ordner wie meine C-Datei

Hilfe

MEIN PROBLEM: Mein fscanf eigentlich nichts zu lesen ist. Meine j Variable ändert sich nie! Die ASCII-Dingen ich beheben kann nun dank der Helfer unter, aber fscanf ist mein Hauptproblem, dass meine Fortschritte zu stoppen

+2

Bitte geben Sie den Code an, den Sie haben –

+2

Verwenden Sie 'fgetc' in einer Schleife – user3386109

+4

und Verwenden Sie' isalpha' – BLUEPIXY

Antwort

0

Sie den Code hier anpassen kann, und überprüfen Sie die Zeichen durch isalnum() Funktion

char *readFileCharacter(char *fileName) { 
    FILE *file = fopen(fileName, "r"); 
    int c; 
    char *code; 
    size_t n = 0; 

    if (file == NULL) 
      return NULL; //impossible to open file 

    // Get the size of the file to allocate correctly the array of char 
    fseek(file, 0, SEEK_END); 
    long f_size = ftell(file); 
    fseek(file, 0, SEEK_SET); 
    code = malloc(f_size); 

    while ((c = fgetc(file)) != EOF) { 
     if (isalnum(c)) // check if alphanum 
      code[n++] = (char)c; 
    } 
    fclose(file); 
    code[n] = '\0';   

    return code; 
} 
+0

Hey, das ist ziemlich cool, aber alles ist sehr fortgeschritten für mich :(Gibt es eine einfachere und einfachere Möglichkeit, dies für Anfänger zu tun. Vielleicht mit fscanf oder etwas ähnliches. Ich habe meinen Code oben hinzugefügt, so dass Sie sehen können, was ich bin Bei – kapra

+0

Sehr einfachen Code, das einzige ist, dass Sie in Bezug auf die Größe Ihrer Datei Agnostiker sein müssen.Die Zuordnung ist dynamisch und abhängig von der Größe der Datei.Sie können auch 'if (isalnum (c))' durch ändern 'if ((c> = 97 && c <= 122) || (c> = 65 && c <= 90))". Das sollte für dich funktionieren. –

+0

Hey vielen Dank! Ein Q aber, wie kommt mein printf (was vor meiner if-Anweisung ist) druckt nichts außer den Zeilenräumen? Meine Variable j hat sich während der Schleife überhaupt nicht verändert! Ich habe sichergestellt, dass meine Textdatei Zeichen enthält und es tut. Wie kommt mein j isn 't speichern sie – kapra

2

Hauptproblem:

/* WRONG */ 
if((j >= '97' && j <= '122') || (j >= '65' && j <= '90')) 

/* CORRECT */ 
if((j >= 97 && j <= 122) || (j >= 65 && j <= 90)) 

mit anderen Worten, die Ausdrücke 'A', '\0x41' und 65 sind alle in diesem Zusammenhang gleichwertig.

Aber '65' ist nicht. Es bedeutet das Zeichen „ASCII 6“ und „ASCII 6“ - so ein Charakter nicht

PS :(existiert: Als Bluepixy vorgeschlagen, isalpha() ist dein Freund Ich ermutige Sie isalpha() in Ihrem Code zu ersetzen

..
+0

Hey vielen Dank! Ein Q obwohl , Wie kommt es, dass mein printf (was vor meiner if-Anweisung ist) nichts anderes als die Zeilenbereiche druckt? Meine Variable j hat sich während der Schleife überhaupt nicht verändert! Ich habe sichergestellt, dass meine Textdatei Zeichen enthält und es tut. Wie kommt es, dass mein j sie nicht speichert? – kapra

Verwandte Themen