C Strings aus Datei einlesen, vergleichen und Zählen

Hallo ich schreibe gerade in C ein Programm, welches eine Textdatei mit folgendem Inhalt verarbeiten sol:

           1960;Frankreich; Sowjetunion
           1964;Spanien;Spanien
           1968;Italien;Italien
           1972;Belgien;Deutschland
           1976;Jugoslawien;Tscheslowakei
           1980;Italien;Deutschland
           1984;Frankreich;Frankreich
           1988;Deutschland;Niederlande
           1992;Schweden;Dänemark
           1996;England;Deutschland
           2000;Belgien-Niederlande;Frankreich
           2004;Portugal;Griechenland
           2008;Österreich Schweiz;Spanien
           2012;Polen-Ukraine;Spanien

Bisher kann mein Programm die gesamte Textdatei ausgeben und Jahr, Gastgeber und Sieger trennen.

Hier das Programm

#include <stdio.h>
#include <conio.h>

void txt_ausgeben(void){
int x, y;

FILE *fp;
fp = fopen("EM.txt", "r+");
while ((x = getc(fp, stdin)) != EOF){
    putc(x, stdout);
}
fclose(fp);

}

int main(void){
int x, z, y, jahr;

txt_ausgeben();
FILE *fp;
fp = fopen("EM.txt", "r");

for (y = 0; y < 14; y++){
    printf("Jahr:");
    while ((x = getc(fp)) != ';'){
        putc(x, stdout);
    }
    printf("\tGastgeber: ");
    while ((x = getc(fp, stdin)) != ';'){
        putc(x, stdout);
    }
    printf("\tSieger: ");
    while ((x = getc(fp, stdin)) != '\n'){
        putc(x, stdout);
    }
    printf("\n");
}

_getch();

}

Doch nun möchte ich noch ermitteln können welches Land die EM am häufigsten ausgetragen und welches am häufigsten Europameister geworden ist.

Ich bin Programmieranfänger und weiß nicht wie ich dies anstellen soll. Kann ich, wenn ich je ein String für die Gastgeber und die Europameister mache, die dann so vergleichen, dass ich die vorgekommenen Nationen zählen?

Wäre schön wenn einer von Euch einen Tipp für mich hätte, ich erwarte ja auch garnicht, dass mir hier ein fertiges Programm hingeworfen wird ich wüsste nur gerne eine Vorgehensweise oder einen Befehl mit dem ich das machen kann.

...zum Beitrag

Moin ich bin der ursprüngliche Fragensteller! Habe inzwischen eine Lösung des Problems gefunden (Ok, vielleicht nicht die schönste, aber vielleicht hilft sie ja jemanden).

Lasse meinen Code mal unkommentiert hier stehen:

#include <stdio.h>
#include <conio.h>
#include <string.h>

struct em
{
	char meister[25];
	char gastgeber[25];
	char jahr[5];
};

struct land
{
	int siegeAnzahl;
	int gastgeberAnzahl;
	char name[25];
};

int main(void)
{
	int c, zeilenAnzahl = 0, i, x, meisterEx = 0, gastgeberEx = 0, laenderIndex=0, erg;
	char meister[25];
	char gestgeber[25];
	char jahr[5];

	struct em ems[30];
	struct land laender[30];
	
		
		FILE *fp = fopen("G:\\EM.txt", "r");

	if (fp == NULL)
	{
		printf("Die Datei konnte nicht gelesen werden!");
	}

	else
	{
		printf("Die Datei KONNTE gelesen werden!");

		while ((c = getc(fp)) != EOF)
		{
			if (c == '\n')
				zeilenAnzahl++;
		}
		zeilenAnzahl++;

		rewind(fp);

		for (i = 0; i < zeilenAnzahl; i++)
		{
			printf("\nJahr:");
			x = 0;
			while ((c = getc(fp)) != ';') {
				jahr[x++] = c;
			}
			jahr[x] = '\0';
			printf("%s", jahr);

			printf("\tGastgeber: ");
			x = 0;
			while ((c = getc(fp)) != ';') {
				gestgeber[x++] = c;
			}
			gestgeber[x] = '\0';
			printf("%s", gestgeber);

			printf("\tSieger: ");
			x = 0;
			if (i < zeilenAnzahl - 1)
			{
				while ((c = getc(fp)) != '\n') {
					meister[x++] = c;
				}
			}
			else
			{
				while ((c = getc(fp)) != EOF) {
					meister[x++] = c;
				}
			}
			meister[x] = '\0';
			printf("%s", meister);

			strcpy(ems[i].gastgeber, gestgeber);
			strcpy(ems[i].jahr, jahr);
			strcpy(ems[i].meister, meister);
		}


		for (i = 0; i < zeilenAnzahl; i++)
		{
			meisterEx = 0;
			gastgeberEx = 0;

			for (x = 0; x < 30; x++)
			{
				if (strcmp(ems[i].gastgeber, laender[x].name) == 0)
					gastgeberEx = 1;
				if (strcmp(ems[i].meister, laender[x].name) == 0)
					meisterEx = 1;
				if (meisterEx == 1 && gastgeberEx == 1)
					break;
			}

			if (gastgeberEx == 0)
				strcpy(laender[laenderIndex++].name, ems[i].gastgeber);
			erg = strcmp(ems[i].gastgeber, ems[i].meister);
			if (meisterEx == 0 && (strcmp(ems[i].gastgeber, ems[i].meister) != 0))
				strcpy(laender[laenderIndex++].name, ems[i].meister);
		}

		for (i = 0; i < laenderIndex; i++)
		{
			printf("\nLand %s", laender[i].name);
			laender[i].gastgeberAnzahl = 0;
			laender[i].siegeAnzahl = 0;
			for (x = 0; x < zeilenAnzahl; x++)
			{
				if (strcmp(laender[i].name, ems[x].gastgeber) == 0)
				{
					laender[i].gastgeberAnzahl++;
				}
				if (strcmp(laender[i].name, ems[x].meister) == 0)
				{
					laender[i].siegeAnzahl++;
				}
			}
			printf("\tGastgeber: %i mal\tEuropameister: %i mal", laender[i].gastgeberAnzahl, laender[i].siegeAnzahl);		
		}

		fclose(fp);
	}

	printf("\n\n");
	system("PAUSE");
	return 0;
}
...zur Antwort

Für die die es wissen wollen: Eure Tipps haben leider nichts funktioniert. Ich habe noch einmal neu gedownloadet, neu installiert und es lief :-)

Natürlich auf dem Windows Konto ohne Sonderzeichen

...zur Antwort

Hier ist die Aufgabe

...zur Antwort

Mhh finde Preis Leistung nicht optimal. Hast du daas alles mal bei Mindfactory zusammen gestellt? Ich hänge mal ein Beispiel vom User cimbom 93x an. Ich weiß der ist auch keine Übermaschine aber von der Preis-Leistung her denke ich besser als was du da hast. Wenn du so ein hohes Budget hast kannst du da ja auch noch dran rumspielen...

Meine Empfehlung für einen 600€ Gaming PC:

~ 600€

Intel Core i5 4460

AsRock H97 Pro4

8GB Crucial Ballistix Sport DDR3-1600 Dual Kit

3GB Sapphire Radeon R9 280 Dual-X OC (Alternative: 2GB MSI GeForce GTX 760 Twin Frozr Gaming)

1TB Seagate Barracuda

450 Watt be quiet! System Power 7

Samsung DVD-RW Zalman Z11 Plus (Amazon ungefähr 55€, schwankend) https://www.mindfactory.de/shopping_cart.php/basket_action/load_basket_extern/id...

Kannst die Komponenten bei Mindfactory bestellen.. Wenn du zwischen 0:00 - 6:00 Uhr bestellst entfallen die Versandkosten...

Zusammenbauen musst du selber... Es gibt dazu tausende Tutorials in YT und in diversen Foren... Du sparst dir viel Geld und bekommst deutlich mehr Leistung gegenüber einem Fertig PC...

Oder falls du keine Ahnung vom Zusammenbau hast, könntest du bei Hardwareversand bestellen und die bauen es dir für 30€ extra zusammen...

Windows bekommst du sehr günstig in eBay für ~ 30€ falls du's brauchst ...

MfG

...zur Antwort

Entschuldigung, ich habe meinen Quellcode ganz vergessen int main(void){ double oeffnungszeit=0, schliesszeit=0, kundenzahl=0, stunden=0, gesamtkunden=0;

printf("\nAuswertung von Kundenzahlen innerhalb eine Tages");
printf("\n====================================================");

printf("\n\nBitte geben Sie zu Beginn die Oefnnungszeiten ein.");
printf("\n\nWann oeffnen Sie das Geschaeft [Nur ganze Zahlen eingeben]: ");
scanf("%lf", &oeffnungszeit);
printf("\nWann schliessen Sie das Geschaeft [Nur ganze Zahlen eingeben]: ");
scanf("%lf", &schliesszeit);

for (oeffnungszeit; oeffnungszeit < schliesszeit; oeffnungszeit=oeffnungszeit+1 ){
    printf("\nBitte geben Sie die Kundenzahl von %.2lf Uhr bis %.2lf Uhr ein:  ", oeffnungszeit, oeffnungszeit+0.59);
    scanf("%lf", &kundenzahl);
    while (kundenzahl>0 && kundenzahl > 9999){
        gesamtkunden = gesamtkunden + kundenzahl;
        stunden = stunden + 1; 
        printf("\nBitte geben Sie die Kundenzahl von %.2lf Uhr bis %.2lf Uhr ein:  ", oeffnungszeit, oeffnungszeit + 0.59);
        scanf("%lf", &kundenzahl);
    

    }
    

}

printf("\n\nSie hatten insgesamt %.0lf Kunden", gesamtkunden);
printf("Sie hatten durchschnittlich %.2lf Kunden", gesamtkunden / stunden);

_getch();

}

...zur Antwort

Das kann man so genau wirklich nicht sagen. Das kommt darauf an wie sehr du auf die Seite eingehst. Wie lange du ungefähr brauchen wirst, lässt sich durch üben feststellen. Wenn ich dir noch einen Rat geben darf: Schmeiß in deine Präsentation nicht lange Texte sondern arbeite Stichpunktartig. Das verführt dich nicht alles abzulesen und bringt dir eine bessere Note!

...zur Antwort

Du Kannst alles mal hier eingeben http://www.mindfactory.de/Hardware.html um rauszufinden wie teuer das wäre.

Würde dir allerdings eher als Prozessor den z.B Intel i5 4460 empfehlen.

Grafikkarte geht klar.

Beim Arbeitsspeicher würde ich zu 8GB Crucial Ballistix Sport DDR3 raten

Das Mainboard kann man nehmen allerdings kann man da besser mit dem ASRock H97M Pro4 Intel H97 So.1150 Dual 10€ sparen

Festplatte ist Geschmacksache. Ich brauche weder 2tb noch eine SSD. Würde aber eine von WD nehmen.

Ich weiß ja nicht ob du Gehäuse und Netzteil Zuhause hast, aber wenn nicht, benötigst du diese auch

Im Bild habe ich einen für 620€ akzeptables System zusammengestellt.

Festplatte: 1000GB WD Blue WD10EZEX 64MB 3.5" (8.9cm) SATA 6Gb/s
Prozessor: Intel Core i5 4460 4x 3.20GHz So.1150 BOX
Mainboard:ASRock H97M Pro4 Intel H97 So.1150 Dual
Gehäuse: Zalman Z11 Plus Midi-Tower PC-Gehäuse (ATX, 4x 5,25 externe, 5x 3,5 interne, 2x USB 3.0) schwarz
Netzteil: 450 Watt be quiet! System Power 7 Bulk Non-Modular 80+ Silver
Arbeitsspeicher:8GB Crucial Ballistix Sport DDR3-1600 DIMM
Grafikkarte:3072MB Sapphire Radeon R9 280 Dual-X OC

...zur Antwort