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

Informatiker Board » Themengebiete » Theoretische Informatik » Struktur » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
lilli.

danke, das war echt verständlich großes Grinsen
Karlito

Das ist die Deklaration der main Funktion. Diese ist bei C-Programmen immer der Einstiegspunkt für die Ausführung des Programmes. Bei einem Lauffähigen Programm wird immer als erstes die main-Funktion aufgrufen und die gesamte Programmausführung endet mit ihr.

Die Main Funktion hat meist folgenden Prototyp:
int main(int, char**);

Das heitß, dass sie einen Integer zurückgibt (der Kann von einem anderen Programm nach der Ausführung geprüft werden, dabei heißt 0 dass alles OK ist und alles andere dass irgendetwas nicht in Ordnung ist). Weiterhin werden beim Aufruf des Programmes der main Funktion immer 2 Parameter übergeben. Die Anzahl der Argumente (oder aus Parameter) auf der Kommandozeile (argc = argument count) und ein array mit den Kommandozeilenparameter selbst (argv = argument vector).
Dabei ist argc immer mindestens 1, da der erste Parameter immer der Programmname selbst ist.

Argumente eines Programmes sind die Dinge die man oft hinter den Aufruf des Programmes schreibt. So zum beispiel unter windows für den shutdown-befehl "shutdown \s \t 0". Dieses Programm hätte 3 Argumente und damit wäre argc=4. Weiterhin wären argv[0] ="shutdown.exe", argv[1] = "\s", argv[2] = "\t" und argv[3] = "0".

Du kannst das gerne mal mit folgendem Programm ausprobieren:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
#include <stdlib.h>
#include <stdio.h>

//der andere Name der Parameter von main soll dir 
//nur zeigen, dass die namen  keine rolle spielen.
//Es muss nur der Prototyp int main(int, char **) 
//übereinstimmen
int main (int anzahl_argumente, char **argumente){
	int i;
	for (i=0;i<anzahl_argumente; i++){
		printf("argumente[%d]: \"%s\"\n", i, argumente[i]);
	}

	return 0;
}


Führe einfach das erzeugte Programm auf der Kommandozeile mit verschiedenen Parametern (beliebig) aus.

VG,

Karlito
lilli.

nur noch eine Sache. Was sagt diese Zeile aus, das was in Klammern steht?
int main(int argc, char **argv)
lilli.

Vielen lieben Dank smile , hab alles soweit verstanden smile
Karlito

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

VG,

Karlito
lilli.

Ja lag am ü. Stimmt folgende Ausgabe:

Herr Martin Mustermann.

Sind ja dann alle Kundennamen die in Düsseldorf wohnen
Karlito

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
lilli.

vielen dank aber bei mir wird nix ausgegeben unglücklich
Karlito

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
lilli.

Hab was gefunden mit strcmp. Muss ich if-Anweisungen aufstellen?
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.