C Grundlagen
-
Hallo,
ich versuche gerade C zu lernen und habe folgendes Problem:
Ich möchte eine Klassenliste erstellen, in die man Schüler erfassen kann und 2. die Schüler anhand einer vom Programm vergebenen Nummer wieder ausgeben kann.
Das Schüler erfassen funktioniert. Nur beim Ausgeben wird dann aber nicht der Name ausgegeben sondern eine NUMMER?
WEiß jemand was ich da falsch gemacht habe?
Vielen Dank Silvia.#include <stdio.h>
#include <string.h>struct Klassenliste
{
int Schuelernummer;
char Vorname;
char Nachname[100];
char Straße;
int Hausnummer;
int PLZ;
};int count = 0;
int main()
{
struct Klassenliste Schuelernummer[100];
int abfrage, nummer;do {
printf("\nKlassenliste\n\n");
printf("<1>Neuen Schueler erfassen\n");
printf("<2>Schueler ausgeben\n");
printf("<3>Ende\n\n");
printf("Ihre Wahl: < > \b\b");
scanf("%d",&abfrage);
fflush(stdin);switch(abfrage)
{
case 1:Schuelernummer[count].Schuelernummer=count;
printf("Nachname : ");
fgets(Schuelernummer[count].Nachname,
100,stdin);
printf("Vorname : ");
scanf("%d",&Schuelernummer[count].Nachname);
fflush(stdin);
printf("\nDaten wurden aufgenommen\n");
printf("Schuelernummer lautet %d\n\n",count);
count++; /* Anzahl Artikel erhöhen*/
break;
case 2:printf("Schuelernummer : ");
scanf("%d",&nummer);
if( (nummer > count) || (nummer <0))
printf("Kein Eintrag dazu\n");
else
{
printf("\n\nSchuelernummer: %ld\n",
Schuelernummer[nummer].Nachname);
printf("Nachname :%d\n",
Schuelernummer[nummer].Nachname);
}
break;
default:break;
}
}while(abfrage != 3);
/*artikel.artikelnummer = 123456;
strcpy(artikel.artikelbezeichnung,"Kaffeedose\n");
artikel.anz_artikel = 10;printf ("Art.nr.:%ld\n",artikel.artikelnummer);
printf ("Artikel:%s",artikel.artikelbezeichnung);
printf ("Anzahl : %d\n" ,artikel.anz_artikel);
*/
return 0;
}
-
Das Ding strotz ja nur so von Fehlern. Deshalb nur die Fehler, die mir auf Anhieb aufgefallen sind:
- Zum Ein- und Ausgeben von Strings dient der Formatstring "%s"
- ein einzelnes char ist etwas klein, um dort einen Namen unterzubringen
fflush(stdin);
ist nicht definiert
PS: sfds
-
Und da man nicht früh genug damit anfangen kann: Denk mal darüber nach, ob eine Postleitzahl wirklich eine Zahl im mathematischen Sinne ist. Kann man zu eine Postleitzahl etwas addieren? Macht die Differenz von zwei Postleitzahlen Sinn? Vielleicht wäre eine Ziffernfolge eher das was du suchst. Bei der Schülernummer ebenso. Und wehe, wenn mal jemand in Hausnummer 2b wohnt.
-
Mit dem Einstieg in C fängt man ganz unten mit den Datentypen an bevor man struct anwendet. Der Datentyp z.B. char speichert nur ein einzelnes Zeichen wie "E" aber nicht den gesamten Namen "Emil". Da sind soviele Fehler im Sourcecode, da musst du erst einmal selbst ran ans Lernen!
-
[Klugscheiss]
Ein Zeichen in C ist z.B. 'E'
"E" sind schon zwei Zeichen.Das sind ganz wichtige Unterschiede in C.
[\Klugscheiss]
-
Ist "E" nicht eher ein Zeiger auf ein Zeichen?
-
z.B.? const char * x = "E" ?
x[0] == 'E'
x[1] == '\0'oder wie?
-
NixWissen schrieb:
z.B.? const char * x = "E" ?
x[0] == 'E'
x[1] == '\0'
oder wie?Genau so. Der Compiler terminiert Stringliterale automatisch mit '\0'.
-
Für einen Anfänger schon mal nicht schlecht abgeschrieben.
Es gab schon weitaus schlimmere Fälle.
- globale Variablen sind was für Anfänger
- Lesen von der Standardeingabe sind oftmals für Anfänger schwer zu begreifen
- als nächstes könntest du mal versuchen, deine Klassenliste in eine Datei zu speichern und daraus wieder zu lesentypedef struct { int Schuelernummer; char Vorname[100]; char Nachname[100]; char Strasse; int Hausnummer; int PLZ; } Klassenliste; int main() { Klassenliste Schueler[100]; int abfrage, nummer, count = 0; do { printf("\nKlassenliste\n\n"); printf("<1>Neuen Schueler erfassen\n"); printf("<2>Schueler ausgeben\n"); printf("<3>Ende\n\n"); printf("Ihre Wahl: < > \b\b"); scanf("%d",&abfrage);while(getchar()!='\n'); switch(abfrage) { case 1:Schueler[count].Schuelernummer=count; printf("Nachname : ");scanf("%99s",Schueler[count].Nachname);while(getchar()!='\n'); printf("Vorname : "); scanf("%99s",Schueler[count].Vorname); while(getchar()!='\n'); printf("\nDaten wurden aufgenommen\n"); printf("Schuelernummer lautet %d\n\n",++count); break; case 2:printf("Schuelernummer : "); scanf("%d",&nummer);while(getchar()!='\n');nummer--; if( (nummer >= count) || (nummer <0)) printf("Kein Eintrag dazu\n"); else { printf("\n\nSchuelernummer: %d\n",Schueler[nummer].Schuelernummer); printf("Nachname :%s\n",Schueler[nummer].Nachname); } break; default:break; } }while(abfrage != 3); /*artikel.artikelnummer = 123456; strcpy(artikel.artikelbezeichnung,"Kaffeedose\n"); artikel.anz_artikel = 10; printf ("Art.nr.:%ld\n",artikel.artikelnummer); printf ("Artikel:%s",artikel.artikelbezeichnung); printf ("Anzahl : %d\n" ,artikel.anz_artikel); */ return 0; }