Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Struktur » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (3): « vorherige 1 [2] 3 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Struktur
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
lilli.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
05.03.2014 18:08
lilli.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

und ich habe deinen code nicht verändert
05.03.2014 18:28
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
05.03.2014 18:54 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
lilli.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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);
}

}
05.03.2014 19:17
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
05.03.2014 19:24 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
lilli.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

ok danke ich versuch es mal.
und guten Appetit ;D
05.03.2014 19:27
lilli.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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);
}
05.03.2014 19:41
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
05.03.2014 19:59 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
lilli.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Kann ich anstelle von scanf auch fread nutzen? Und wie macht man VergleicheP?
05.03.2014 20:22
lilli.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hab was gefunden mit strcmp. Muss ich if-Anweisungen aufstellen?
05.03.2014 20:24
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
05.03.2014 20:30 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
lilli.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

vielen dank aber bei mir wird nix ausgegeben unglücklich
05.03.2014 20:36
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
05.03.2014 21:15 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
lilli.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ja lag am ü. Stimmt folgende Ausgabe:

Herr Martin Mustermann.

Sind ja dann alle Kundennamen die in Düsseldorf wohnen
05.03.2014 21:24
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

VG,

Karlito
05.03.2014 21:31 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Seiten (3): « vorherige 1 [2] 3 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » Struktur