Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
--- Struktur (http://www.informatikerboard.de/board/thread.php?threadid=1825)


Geschrieben von lilli. am 05.03.2014 um 18:08:

 

Bei mir wird Folgendes ausgegeben:
Herr Martin Mustermann
Frau Barbara Becker

Aber eigentlich sollte ja nur der Datensatz für Düsseldorf angegeben werden mit der PLZ



Geschrieben von lilli. am 05.03.2014 um 18:28:

 

und ich habe deinen code nicht verändert



Geschrieben von Karlito am 05.03.2014 um 18:54:

 

Entschuldigung, das habe ich überlesen. Ich denke dann könnte es sinnvoll sein, mit einem struct zu arbeiten. Und mit fscanf.

Wenn dir dazu nichts einfällt, schreibe ich ein entsprechendes Programm, aber versuche mal bitte selbst eins zu schreiben.

VG,

Karlito



Geschrieben von lilli. am 05.03.2014 um 19:17:

 

Fscanf ist doch dafür da am Ende selbst etwas zu schreiben/einzulesen?
Stimmt der Aufbau so jetzt muss ich nur noch fscanf einfügen oder fprintf, ich muss ja nur was ausgeben

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

struct kunde {
char anrede;
char vorname;
char name;
char strasse;
int hausnr;
int plz;
char stadt;
};


int main(void) {
int c;
FILE *datei;

datei=fopen("kunde.txt", "r");
if(datei != NULL) {
while( (c=fgetc(datei)) != EOF)
putchar(c);
}

}



Geschrieben von Karlito am 05.03.2014 um 19:24:

 

Mit dem Programm gibst du einfach nur aus, was du einliest. Außerdem brauchst du für das struct Feldlängen, da hier ja nicht nur ein einzelnes Zeichen gelesen werden soll, sondern ein string (char-Array).

fscanf kann verwendet werden, um daten aus einer datei zu lesen (nicht verwechseln mit scanf). fprintf schreibt in dateien. Das brauchst du hier auch nicht.

printf bietet sich an, da du dann einfach soetwas machen kannst:
code:
1:
printf("%s %s %s\n", kunde.anrede, kunde.vorname, kunde.name);


Schau dir mal fscanf an und wie man damit dateien auslesen kann. Ich gehe derweil mal in die Mensa Abendbrot essen Augenzwinkern

VG,

Karlito



Geschrieben von lilli. am 05.03.2014 um 19:27:

 

ok danke ich versuch es mal.
und guten Appetit ;D



Geschrieben von lilli. am 05.03.2014 um 19:41:

 

Hab die Werte eingelesen und versucht auszugeben, was aber leider nicht klappt.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
#include <stdio.h>
#include <stdlib.h>

struct kunde {
    char anrede[50];
    char vorname[50];
    char name[50];
    char strasse[50];
    int hausnr;
    int plz[8]; //wegen 0-9
    char stadt[];
};


int main(void) {
   int c;
   FILE *datei;
   struct kunde k;

   datei=fopen("kunde.txt", "r");
   while(!feof(datei)){
    fscanf(&k,sizeof(struct kunde),1,datei);
    printf("%s %s %s %d %s",k.anrede, k.vorname, k.name, k.plz, k.stadt);
   }
   fclose(datei);
}



Geschrieben von Karlito am 05.03.2014 um 19:59:

 

Der Ansatz ist ganz gut, hat aber ein paar Mängel:

- du hast fscanf falsch verwendet
- warum hat stadt keine länge?
- plz würde ich als string deklarieren, das macht das leben leichter
- genauso die hausnummer

Dann fehlt noch der Vergleich auf Düsseldorf und 40210.

Versuchs noch mal.

VG,

Karlito



Geschrieben von lilli. am 05.03.2014 um 20:22:

 

Kann ich anstelle von scanf auch fread nutzen? Und wie macht man VergleicheP?



Geschrieben von lilli. am 05.03.2014 um 20:24:

 

Hab was gefunden mit strcmp. Muss ich if-Anweisungen aufstellen?



Geschrieben von Karlito am 05.03.2014 um 20:30:

 

Fread geht auch. Ich finde fscanf hier aber Praktischer. strcmp ist hier genau der richtige Ansatz Ich war mal so frei:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

//beachte, dass char nicht ausreicht! Es handelt sich um Strings.
//Strings sind nichts anderes als char-Arrays.
typedef struct kunde {
    char anrede[50];
    char vorname[100];
    char name[100];
    char strasse[200];
    char hausnr[10]; //Hausnummern enthalten auch oft Buchstaben, deswegen kein int
    char plz[6]; //muss mindestens 6 lang sein, wegen \0 Terminierung! char[] wegen führender 0
    char stadt[100];
} kunde_t;

int main(int argc, char **argv){
  FILE *fptr;
  kunde_t kunde;

  fptr = fopen("kunde.txt", "r");

  while(!feof(fptr)){
    //Die Zahlen hinter den s geben ein Limit für 
    //die Länge an, so dass nicht über die Länge des
    //Ziel-Arrays hinaus gelesen werden kann
    //Wichtig! Das Limit muss eins kleiner sein
    //als die Länge des Arrays, da nach den eingelesenen
    //Zeichen noch die Terminierung eingefügt wird
    fscanf(fptr, "%49s%99s%99s%199s%9s%6s%99s", 
        kunde.anrede,
        kunde.vorname,
        kunde.name,
        kunde.strasse,
        kunde.hausnr,
        kunde.plz,
        kunde.stadt);

    //strcmp gibt nicht! 1 zurück, wenn sich die beiden strings unterschreiden,
    //sondern eine Zahl, die Auskunft über den Unterschied gibt.
    if(!strcmp(kunde.stadt, "Düsseldorf") && !strcmp(kunde.plz, "40210")){
      printf("%s %s %s\n", kunde.anrede, kunde.vorname, kunde.name);
    }
  }

  return 0;
}


VG,

Karlito



Geschrieben von lilli. am 05.03.2014 um 20:36:

 

vielen dank aber bei mir wird nix ausgegeben unglücklich



Geschrieben von Karlito am 05.03.2014 um 21:15:

 

Dann schaue bitte mal nach unterschieden zwischen dem Vergleich und der Textdatei. Außerdem könnte es ein Problem mit Sonderzeichen geben. Also versuche mal bitte "ü" durch "ue" bei Düsseldorf auszutauschen.

Ich habe es bei mir getestet und es läuft. Ich verwende jedoch Linux. Es kann durchaus sein, solltest Du Windwos verwenden, dass es dort zu Problemen kommt.

VG,

Karlito



Geschrieben von lilli. am 05.03.2014 um 21:24:

 

Ja lag am ü. Stimmt folgende Ausgabe:

Herr Martin Mustermann.

Sind ja dann alle Kundennamen die in Düsseldorf wohnen



Geschrieben von Karlito am 05.03.2014 um 21:31:

 

Schön, freut mich zu hören! Solltest Du irgendetwas an meinem Programm nicht verstehen, dann gerne nachfragen.

VG,

Karlito


Forensoftware: Burning Board, entwickelt von WoltLab GmbH