brauch mal hilfe zum bubblesort
-
Hallo!
Wie müsste ich den Vergleich zwischen geb_vgl=; und anst_vgl=; vornehmen sodass beide miteinander
verglichen werden wie name_vgl=strcmp(angest[i].name, angest[j].name); und vorname_vgl=strcmp(angest[i].vorname, angest[j].vorname); ?MfG Chris!
#include<stdio.h>
#include<string.h>#define MAX 100
struct datum{
int tag;
int monat;
int jahr;
};struct person{
char name[20];
char vorname[20];
struct datum dat_geb;
struct datum dat_anst;
}angest[MAX];void sortieren(int anzahl, int wahl)
{
int i, j;
char name_vgl, vorname_vgl;for(i=0; i<anzahl-1; i++)
{
for(j=0;j<anzahl;j++)
{
name_vgl=strcmp(angest[i].name, angest[j].name);
vorname_vgl=strcmp(angest[i].vorname, angest[j].vorname);
// geb_vgl=;
// anst_vgl=;}
}void main(void)
{
int i;for(i=0; i<MAX; i++)
{
printf("Eingabe der %d Person\n", i);printf("Name: ");
gets(angest[i].name);printf("\nVorname: ");
gets(angest[i].vorname);printf("\nGeburtsdatum: ");
scanf("%d %d %d", &angest[i].dat_geb.tag, &angest[i].dat_geb.monat, &angest[i].dat_geb.jahr);printf("\nAngestellt seit (Datum): ");
scanf("%d %d %d", &angest[i].dat_anst.tag, &angest[i].dat_anst.monat, &angest[i].dat_anst.jahr);if(strlen(angest[i].name==0))
{
break;
}
}
}
-
Haste die Code Tags übersehen?
Zu deinem Problem, dass geht genauso.Fehler:
- gets legt ein undefiniertes Verhalten an den Tag .
- void main() ist Falsch!#include<stdio.h> #include<string.h> #define MAX 100 struct datum{ int tag; int monat; int jahr; }; struct person{ char name[20]; char vorname[20]; struct datum dat_geb; struct datum dat_anst; }angest[MAX]; void sortieren(int anzahl, int wahl) { int i, j; char name_vgl, vorname_vgl; for(i=0; i<anzahl-1; i++) { for(j=0;j<anzahl;j++) { name_vgl=strcmp(angest[i].name, angest[j].name); vorname_vgl=strcmp(angest[i].vorname, angest[j].vorname); // geb_vgl=; // anst_vgl=; strcmp(geb_vgl, anst_vgl); // Wenn geb_vgl und anst_vgl char arreys sind if(geb_vgl==anst_vgl) // Wenn geb_vgl und anst_vgl int, char, etc. sind { // ... } } } } int main() { int i; for(i=0; i<MAX; i++) { printf("Eingabe der %d Person\n", i); printf("Name: "); gets(angest[i].name); // gets legt ein undefiniertes Verhalten an den Tag printf("\nVorname: "); gets(angest[i].vorname); // gets legt ein undefiniertes Verhalten an den Tag printf("\nGeburtsdatum: "); scanf("%d %d %d", &angest[i].dat_geb.tag, &angest[i].dat_geb.monat, &angest[i].dat_geb.jahr); printf("\nAngestellt seit (Datum): "); scanf("%d %d %d", &angest[i].dat_anst.tag, &angest[i].dat_anst.monat, &angest[i].dat_anst.jahr); if(strlen(angest[i].name==0)) { break; } } return 0; }
-
IMHO kannst du das gut machen, wenn du die "time.h" inkludierst und dann das Datum mit mktime() in eine time_t-Struktur schreibst. Geht der Aufruf schief, dann stimmt das Datum nicht wirklich. Code-Segment, was auch buggy sein kann, da nicht getestet und nur so aus dem Kopf heraus:
#include <time.h> #include <stdio.h> int main(void) { int tag, monat, jahr; struct tm geb, angest; time_t geb_t, angest_t; // nicht einzulesende Werte mit Standardwerten belegen geb.tm_hour = angest.tm_hour = 0; geb.tm_min = angest.tm_min = 0; geb.tm_sec = angest.tm_sec = 1; geb.tm_isdst = angest.tm_isdst = -1; // Werte einlesen printf("Geburtsdatum (tt.mm.jjjj): "); scanf("%d.%d.%d", tag, monat, jahr); angest.tm_mday = tag; // Monatstag angest.tm_mon = monat - 1; // Monat im Jahr [0,11] angest.tm_year = jahr - 1900; // Jahr seit 1900 printf("Angestellt seit (tt.mm.jjjj): "); scanf("%d.%d.%d", tag, monat, jahr); // die Daten erstmal in die tm-structs schreiben angest.tm_mday = tag; angest.tm_mon = monat - 1; angest.tm_year = jahr - 1900; // jetzt versuchen ein gültiges Datum daraus zu bilden geb_t = mktime(&geb); if(geb_t == -1) printf("Das Geburtsdatum kenne ich nicht...\n"); angest_t = mktime(&angest); if(angest_t == -1) printf("Das Angestelltendatum kenne ich nicht...\n"); // ... // hier kommt noch der Vergleich hin bzw. das Sortieren... // ... return 0; }
Wie gesagt: kann jetzt nicht überprüfen, ob das funktioniert, must du selber eben ein wenig rumprobieren. Die time_t-Werte (entsprechen int-Variablen)kannst du jetzt einfach miteinander vergleichen, musst halt nur noch aus geb_t und angest_t Arrays machen...
Hoffe geholfen zu haben,
Ciao
RTC
-
@quizmaster
was ist das für ein undefiniertes verhalten, was du mit gets meinst?
-
gets legt ein undefiniertes Verhalten an den Tag .
----
fgets ist besser, aber umständlicher. Wenn du genau weißt was du machst kannst du auch gets nehmen. (siehe: bufferoverflow)void main() ist Falsch!
-----
void main() ist erlaubt!------
FREAK
-
Original erstellt von <FREAK>:
void main() ist erlaubt!Das kannst Du sicher anhand des Standards belegen? (Hint: ein Compiler KANN void main unterstützen, muss er aber nicht)
-
void main()
{
}Nach dem älteren C89-Standard ist dies auch richtig. Das ist wirklich kleinkariert, da es fast keinen Compiler gibt der dies als Fehler ausgibt. (Abwärtskompatibel)
-
nein, das ist auch nach C89 falsch. Es war auch nach K&R falsch, da es da noch kein void gab. Es gab nie einen offiziellen oder inoffiziellen Standard, nach dem das richtig war. Das haben nur die Leute, die denken, alles was ihr Compiler kann ist richtig, nie anders gelernt. Manche von denen schreiben jetzt Bücher über das was sie für C halten ...