2016-06-25 6 views
1

Dieser Code ist eine kleine Lernerfahrung über File I/O, die ich noch nicht ganz beenden kann:Wie nach bestimmten Zeichenfolgen und Ganzzahlen in einer TXT-Datei C suchen und verwenden?

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main() 
{ 
    FILE *fP; 

    char so_name[64]; 
    char user_name[64]; 
    int number; 
    char continue_button; 

    time_t t; 

    system("TITLE Love-0-meter"); 
    system("COLOR 4D"); 

    srand((unsigned) time(&t)); 
    number = (rand() %100); 

    printf("Hi and welcome to the love-o-meter, please fill in the details and see how much you and your SO" 
     " love each other!\n\nHave you used this program before?(Y/N)"); 
    do 
    { 
     scanf(" %c", &continue_button); 

    }while(continue_button != 'n' && continue_button != 'N' && continue_button != 'Y' && continue_button != 'y'); 

    system("CLS"); 
    printf("Enter your SO's name: "); 
    scanf(" %s", so_name); 
    printf("Enter your name: "); 
    scanf(" %s", user_name); 
    printf("\n%s and %s, you love each other %d%%", so_name, user_name, number); 

    if(continue_button == 'N' || continue_button == 'n') 
    { 
     fP = fopen("Love-o-meter.txt", "w"); 
    } 
    else 
    { 
     fP = fopen("Love-o-meter.txt", "a"); 
    } 
    fprintf(fP, "%s %s %i\n", so_name, user_name, number); 
    fclose(fP); 

    return 0; 
} 

Grundsätzlich ist der Benutzer in 2 Namen eingeben muß, und mit einem zufälligen zusammen in einer TXT-Datei gespeichert werden Nummer. Aber bevor die Namen gespeichert werden, muss das Programm prüfen, ob sie zuvor in der gleichen Reihenfolge verwendet wurden und sich bereits in der Datei befinden. Wenn sie tatsächlich vorher benutzt wurden, darf das Programm keine neue Nummer erzeugen, sondern die mit den 2 Namen gespeicherte Nummer verwenden und auf dem Bildschirm ausdrucken.

Ich habe den ganzen Tag gelesen, aber ich kann einfach nicht herausfinden, wie und was zu implementieren, um in der Lage sein, zuvor gespeicherte Namen und Nummern zu lesen und sie zu verwenden, wenn es eine Übereinstimmung findet.

Antwort

0

Ich habe den ganzen Tag gelesen, aber ich kann einfach nicht herausfinden, wie und was zu implementieren das Programm in der Lage sein zuvor gespeicherten Namen und Zahlen zu lesen und sie verwenden, wenn es eine Übereinstimmung findet.

Sie haben bereits richtig beschrieben, was zu tun ist. Um dies zu tun, müssen Sie

  • die Datei in einem Modus zu öffnen, die (statt aa+) Lesen
  • den gespeicherten Namen und Nummern e lesen können. G. mit fscanf()
  • sie den eingegebenen Namen zu vergleichen mit strcmp()
  • die gespeicherte Nummer zuweisen, wenn die Namen

passen - so

printf("\n%s and %s, you love each other %d%%", so_name, user_name, number); 

    if(continue_button == 'N' || continue_button == 'n') 
    { 
     fP = fopen("Love-o-meter.txt", "w"); 
    } 
    else 
    { 
     fP = fopen("Love-o-meter.txt", "a"); 
    } 
    fprintf(fP, "%s %s %i\n", so_name, user_name, number); 

zu

if(continue_button == 'N' || continue_button == 'n') 
    { 
     fP = fopen("Love-o-meter.txt", "w"); 
    } 
    else 
    { 
     char so_used[64]; 
     char user_used[64]; 
     int nuused; 
     fP = fopen("Love-o-meter.txt", "a+"); // append + read 
     while (fscanf(fP, "%s %s %i\n", so_used, user_used, &nuused) == 3) 
      if (!strcmp(so_used, so_name) && !strcmp(user_used, user_name)) 
      { 
       number = nuused; 
       goto out; 
      } 
    } 
    fprintf(fP, "%s %s %i\n", so_name, user_name, number); 
out: 
    printf("%s and %s, you love each other %d%%\n", so_name, user_name, number); 
ändern
0

Sie können Ihre Position in einer Datei speichern, von Anfang an scannen und dann zur gespeicherten Position zurückkehren.

char name1[256], name2[256]; 
int val; 
size_t pos = ftell(fP); 
rewind(fP); 
while(fscanf(fp, "%s %s %d", name1, name2, &val) == 3) { 
    // compare everything you need 
} 
fseek(fP, pos, SEEK_SET) 

Ich hoffe, dass ich dich verstanden rechts :)

0

Was Sie tun wollen, ist die Datei zu analysieren. Um dies mit Strings in einer Textdatei zu tun, müssen Sie wissen, wo Sie Namen und Ergebnisse finden, die für die Namen gespeichert sind.

Wie die vorherige Antwort vorgeschlagen, ist die Verwendung von Positionen etwas, was Sie wirklich untersuchen sollten. Außerdem möchten Sie vielleicht Namen und Ergebnisse mit einem Leerzeichen oder einem Zeichen und jedem neuen Eintrag mit einem Zeilenumbruch trennen. Sie können dies zusammen mit einer gespeicherten Position verwenden, um zu bestimmen, um welchen Eintrag es sich handelt und ob Sie einen Namen oder ein Ergebnis lesen.

Weiter sollten Sie wahrscheinlich etwas lesen auf der "fopen" -Dokumentation, z. this

Ich hoffe, das war, was Sie gesucht haben.