2 Stimmen

Lesen aus Textdatei C

Ich habe eine char-Variable, die eine Nummer enthält, die die Prüfungs-ID darstellt (es ist char, weil es char sein muss). Meine Textdatei sieht so aus:

5   1   Prüfung 1 (Audit am 31.10.)
6   1   Prüfung 2 (Audit am 23.10.)
14  1   Labor 01 (Audit am 21.11.)
16  1   Labor 02 (Audit am 28.11.)
...

Die erste Nummer in jeder Zeile ist die Prüfungs-ID, die zweite ist die maximal mögliche Punktzahl für diese Prüfung, und der Rest des Textes in der Zeile ist der Prüfungsname. Ich muss den Text nach Übereinstimmungen mit der Prüfungs-ID durchsuchen, und wenn eine Übereinstimmung vorliegt, muss ich die maximale Punktzahl und den Prüfungsnamen in Variablen speichern, um sie später zu verwenden. Das ist mein aktueller Stand:

char examName[100];
char tmp[100];
int  examID;
int  maxPoint=0;

FILE *fin=fopen("Exams.txt", "r");

while(fgets(tmp, sizeof(char)*100, fin)!=NULL) {
    sscanf(tmp, "%d", &examID);
    if(examID==s.examNum)
        printf("%d", examID);
}

Ich habe also die Übereinstimmung gefunden und ausgegeben, und das ist in Ordnung, aber ich weiß nicht, wie ich die zweite Zahl in der Zeile und den Prüfungsnamen lesen kann.

3voto

Mike Punkte 43431

Du warst fast da:

sscanf(tmp, "%d %d %[^\n]", &examID, &maxPoint, examName); 
if(examID==s.examNum)
    printf("%d %d %s\n", examID, maxPoint, examName);

fgets liest die gesamte Zeile und sscanf parst sie gemäß des Formatstrings. Wenn du also eine Zahl, dann eine Zahl und dann einen String benötigst (wie in diesem Fall), kannst du "%d %d %[^\n]" verwenden.

Hinweis: Da der examName Leerzeichen enthält (und der letzte Teil der Textdatei vor dem Zeilenumbruch ist), verwenden wir das negierte Scanset, um sscanf mitzuteilen "Ich möchte alles bis zum Zeilenumbruch als String speichern".


Nebenbei, initialisiere deine Variablen:

char examName[100] = {'\0'};
char tmp[100] = {'\0'};
int  examID = 0;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X