Kleines Problem beim Programmieren
-
na, hier wird man ja gleich nett aufgenommen...ich habe bisher folgendes zu werke gebracht...
#include <stdio.h>
#include <stdlib.h>int main ()
{
const int n=100;
int a[n], i;
for (i=0; i<n; i++)
a[i]=rand()%100;for (i=0; i<100; i++)
printf("&d, ",a[i]);return 0;
}
-
Student1 schrieb:
na, hier wird man ja gleich nett aufgenommen...ich habe bisher folgendes zu werke gebracht...
kein wunder, wenn du so unverschämt hier ankommst. hier ist ja nicht das internationale hilfswerk für faule studenten...
zeig eigeninitiave und stell eine konkrete frage, dann bekommst du hier auch garantiert fundierte hilfe.
-
mach mal "%d" statt dem "&d", dann müsste es doch schon tun, was du willst.
Im übrigen ist das (fast reines) c.
Und das nächstemal benutz doch bitte [cpp]...[/cpp]
-
na, und das musst du jetzt nur noch in eine Funktion auslagern.
offtopic: das hat nichts mit Unfreundlichkeit zu tun. Es sind d e i n e Hausaufgaben, die d u machen sollst.
-
naja, ich habe es ja gemacht...nur bin ich mir nicht sicher ob es richtig war, vielleicht hätee ich es von anfang an reistellen sollen. trotzdem danke!
-
Student1 schrieb:
naja, ich habe es ja gemacht...nur bin ich mir nicht sicher ob es richtig war, vielleicht hätee ich es von anfang an reistellen sollen. trotzdem danke!
Wenn du von Anfang an etwas reingestellt hättest, dann hättest du keine solche Kommentare bekommen. Es gibt genug faule Leute, die ihre Arbeit von uns machen lassen wollen.
-
ja, kann ich ja verstehen..beim nächsten mal werde ich dann konkreter! wie gesagt, trotzdem dank an alle!
-
Statt printf ist cout modern und statt
int i; for (i=0; i<100; i++)eher einfach
for (int i = 0; i < 100, i++)Im übrigen ist das (fast reines) c.
Aber unter C++ gibt es noch Programmierer, die die erste Variante der for-Schleife bevorzugen, wenn er also statt cout einmal printf verwendet, würde ich nicht von reinem C sprechen.
-
Auch in C ist das freie Mischen von Deklarationen sowie die Definition in for-Statements (mit dem for-Statement als scope) zulässig und dieser Teil von C99 wird sehr breit unterstützt, auch wenn die vollständige Umsetzung von C99 vergleichsweise selten ist.
-
ja, danke für die tipps!
-
Moin zusammen!
Ich hoffe mir kann hier jemand weiter helfen!
Ich muss am montag ein Programm zur Datenverwaltung abgeben und hänge total! Irgendetwas stimmt in der Funktion "eingabe" nicht und ich finde den Fehler nicht (meine Programmierkenntnisse sind auch sehr besch..eiden)!Das Progamm wirft mich bei der Eingabe eines neuen Datensatzes (Hinzufügen) bei der mit //"" ""// markierten Stelle raus.
Hier ist der komplette Quellcode:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#ifndef _WINDOWS_
#ifndef STRICT
#define STRICT
#endif // #ifndef STRICT
#endif // #ifndef _WINDOWS_//Funktionen
int suchen(char);
int vgl(const void* p1,const void* p2);
struct student einlesen();
void pruefen();
void auswahl();
void ausgeben(struct student);
void eingabe();
void ausgabe();
void namesuchen();
void laden();
void speichern();
void loeschen();
inline void clrscr();// Definition des Datensatzes
struct student
{
char name[30];
unsigned long matrikelnummer[30];
char semester[30];
char fach[30];
float note;
};int n; // Anzahl der Studenten
struct student *stud;//---BEGINN Hauptprogramm--------------------------------------------------------------------------
void main()
{
char a;pruefen();
do
{
//Programmmenüprintf("\n\tWillkommen in der Studenten-Datnbank! \n ");
printf("\n\tDieses Programm unterstuetzt Sie \n"),
printf(" \tbeim Anlegen und Verwalten \n");
printf(" \tvon bis zu 12 Datensaetzen von Studenten.\n");
printf("\n\tDas weiterfuehrende Menue wird Sie durch das Programm leiten: \n");
printf("\n\tDie in Klammern stehenden Buchstaben zur Auswahl eingeben\n");
printf("\n\tund mit<return> (>Eingabe> bestaetigen!\n\n");printf("\n * * * * * * * * * * * * * * M e n u e * * * * * * * * * * * * * * * *\n");
printf("\n *\t1. (H)inzufuegen--> Neuen Studenten eingeben *\n");
printf("\n *\t2. (N)amesuchen---> Nach Namen suchen *\n");
printf("\n M\t3. (A)usgabe------> Alle Datensaetze auflisten M\n");
printf("\n e\t4. (d)elete-------> Datensatz Loeschen e\n");
printf("\n n\t5. (l)oad---------> Laden der Datei Studenten-Datenbank.dat n\n");
printf("\n u\t (!!!ACHTUNG: nicht gespeicherte Eingaben gehen verloren!!!) u\n");
printf("\n e\t6. (s)ave---------> Speichern der Datensätze e\n");
printf("\n *\t7. (q)uit---------> Programm beenden *\n");
printf("\n * * * * * * * * * * * * * * M e n u e * * * * * * * * * * * * * * * *\n\n\n");
printf(" Ihre Eingabe : ");scanf("%c",&a);
printf("\n");switch (a)
{
case 'h':
case 'H': eingabe();
break;case 'n':
case 'N': namesuchen();
break;case 'a':
case 'A': ausgabe();
break;case 'd':
case 'D': loeschen();
break;case 'l':
case 'L': laden();
break;case 's':
case 'S': speichern();
break;}
if (a == 'q' || a == 'Q')
break;fflush(stdin);
printf("\n\tweiter mit Eingabetaste\n");
getchar();
clrscr();
}
while (1);speichern();
free(stud);
}
//---ENDE Hauptprogramm-----------------------------------------------------------------------//---BEGINN Prüfen----------------------------------------------------------------------------
void pruefen ()
{
FILE *datei_ptr;
char *datei = "Studenten-Datenbank.dat";datei_ptr = fopen(datei,"r");
if (datei_ptr != NULL)
fclose(datei_ptr);
else
{
printf("\n Es ist noch keine Datei vorhanden!\n");
auswahl ();
}
}
//---ENDE Prüfen------------------------------------------------------------------------------//---BEGINN Abfrage---------------------------------------------------------------------------
void auswahl ()
{char abfrage = NULL;
printf("\n Wollen Sie eine Neue anlegen?\n\n");
fflush(stdin);
printf ("\n\n (j) => ja \t\t (n) => nein\n\t");
scanf ("%c", &abfrage);if (abfrage =='j')
{
n=0;
stud=(struct student*)calloc(1,sizeof(struct student));
eingabe();
}
}
//---ENDE Abfrage-----------------------------------------------------------------------------//---BEGINN Binäre Suche, zum Suchen nach einen Datensatzes-----------------------------------
int suchen(char s[50])
{
int unten=0,oben=n,mitte;if (strcmp(s,stud[unten].name)<=0)
return 0;
else
{
while(oben-unten>1)
{
mitte=(oben-unten)/2;
if (strcmp(s,stud[unten+mitte].name)==0)
{
unten+=mitte;
oben=unten;
}
if (strcmp(s,stud[unten+mitte].name)>0)
unten+=mitte;
else
oben=unten+mitte;}
if (strcmp(s,stud[oben-1].name)==0)
oben--;
return oben;
}
}
//---ENDE Binäre Suche-------------------------------------------------------------------------//---BEGINN Vergleich zweier Datensätze nach dem Namen für qsort-------------------------------
int vgl(const void* p1,const void* p2)
{
struct student* std1,std2;
std1=(struct student)p1;
std2=(struct student*)p2;
return strcmp(std1->name,std2->name);
}
//---ENDE Vergleich zweier Datensätze nach dem Namen für qsort---------------------------------//---BEGINN Einlesen in den Arbeitsspeicher----------------------------------------------------
struct student einlesen()
{
struct student adr;printf("\n");
printf("\tName : ");
scanf("%s",&(adr.name));
printf("\tMatrikelnummer : ");
scanf("%d",&(adr.matrikelnummer));
printf("\tSemester : ");
scanf("%s",&(adr.semester));
printf("\tFach : ");
scanf("%s",&(adr.fach));
printf("\tNote : ");
scanf("%d.1",&(adr.note));
fflush(stdin);return adr;
}
//---ENDE Einlesen in den Arbeitsspeicher-----------------------------------------------------//---BEGINN Speichern (Schreiben) Datensatz in Datei-----------------------------------------
void eingabe()
{
struct student adr;adr=einlesen();
// falls die Datei nicht leer war
if (n>0)
{
stud=(struct student*)realloc(stud,(n+1)*sizeof(student));
stud[n]=adr;
}
// falls die Datei leer war
else//""stud[0]=adr;""//
n++;
// Studenten neu sortieren
qsort(stud,n,sizeof (struct student), vgl);
}
//---ENDE Speichern (Schreiben) eines Datensatzes in eine Datei-------------------------------//---BEGINN Ausgeben eines Studenten auf den Bildschirm---------------------------------------
void ausgeben(struct student adr)
{
printf("%s\t\t %s\t\t %d\t\t %2.1f \n",
adr.name,
adr.matrikelnummer,
adr.semester,
adr.fach,
adr.note);
printf("\n\n");
}
//---ENDE Ausgeben eines Studenten auf den Bildschirm-----------------------------------------//---BEGINN Ausgabe der gesamten Datei (tabellarisch)-----------------------------------------
void ausgabe()
{
int k;if(n<=0)
printf("\tKeine Datensaetze vorhanden\n");
else
{
printf("Name:\t\tMatrikelnummer:\t\tSemester:\\ttFach:\t\t\tNote:\t\t\n");
printf("-----------------------------------------------------------------------------\n");
for (k=0;k<n;k++)
ausgeben(stud[k]);
}
}
//---ENDE Ausgabe der gesamten Datei (tabellarisch)-------------------------------------------//---BEGINN Suche nach Name-------------------------------------------------------------------
void namesuchen()
{
char s[50];
int k=0;printf("Name eingeben: ");
scanf("%s",s);
fflush(stdin);k = suchen(s);
if (strcmp(stud[k].name,s)==0)
ausgeben( stud[k]);
else
printf("Name %s nicht vorhanden\n",s);
}
//---ENDE Suche nach Name---------------------------------------------------------------------//---BEGINN Löschen eines Datensatzes---------------------------------------------------------
void loeschen()
{
int k=0;
char s[50];printf(" Name eingeben: ");
scanf("%s",&s);
k=suchen(s);if (strcmp(stud[k].name,s)==0)
{
stud[k]=stud[n-1];
n--;
// Studenten neu sortieren
qsort(stud,n,sizeof (struct student), vgl);
}
else
{
printf(" Name %s nicht vorhanden\n",s);
stud=(struct student*)realloc(stud,n*sizeof(struct student));
}
}//---BEGINN Laden der Datei in das Feld stud-------------------------------------------------
void laden()
{
FILE* fptr;fptr=fopen("Studenten-Datenbank.dat","r");
free(stud);// falls das Laden funktioniert hat
if (fptr!=NULL)
{
// Anzahl der Studenten einlesen
fread(&n,sizeof( int ),1,fptr);// Speicher allokieren
stud=(struct student*)calloc(n,sizeof(struct student));// Studenten einlesen
fread(stud,sizeof(struct student),n,fptr);fclose(fptr);
}
// falls die Datei leer war
else
{
printf("\n\tKeinen Datensatz gefunden!\n");
auswahl ();
}
}////---BEGINN Speichern (Schreiben) Datensatz in Datei---------------------------------------
void speichern()
{
FILE* fptr;
int k;fptr=fopen("Studenten-Datenbank.dat","w+");
fwrite(&n,sizeof( int ),1,fptr);for (k=0;k<=n-1;k++)
{
fwrite(&stud[k],sizeof(struct student),1,fptr);
}fclose(fptr);
}
//---ENDE Speichern (Schreiben) Datensatz in Datei--------------------------------------------//---Funktion Fr. Prof. Dr. Benra-------------------------------------------------------------
/* clrscr versetzt Sie in die Lage den Bildschirm zu löschen. Es wird ohne Parameter aufgerufen.*/
inline void clrscr()
{
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(hCon, &csbi);DWORD dwWritten = 0;
COORD coord = {0, 0};
FillConsoleOutputCharacter(hCon, ' ', csbi.dwSize.Xcsbi.dwSize.Y, coord, &dwWritten);
FillConsoleOutputAttribute(hCon, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE,
csbi.dwSize.Xcsbi.dwSize.Y, coord, &dwWritten);
SetConsoleCursorPosition(hCon, coord);
}Wäre für jede Art von Hilfe sehr dankbar!!!
-
Was soll diese unverschämte Art?
Du machst nicht einmal einen neuen Thread auf, postest einen ellenlangen Code, dazu noch ohne
-Tags, und willst, dass wir dir den Fehler finden?
Wie wärs, wenn du etwas Eigeninitiative zeigen würdest? Dieses Forum ist nicht da, um Leuten zu helfen, die nicht an einer eigenen Problemlösung interessiert sind. Wenn du wenigstens nur den relevanten Codeteil posten könntest...
Abgesehen davon ist dein Code voller Grausamkeiten (void main() etc.) und ist in C (obwohl es eigentlich nicht würdig ist, so genannt zu werden) geschrieben.
Verstehst du auch nur einen Teil deines Codes?Du erwartest doch nicht im Ernst, dass dir so jemand hilft?
