Wie könnte ich meinen src noch weiter optimieren/verkürzen??
-
#include <stdlib.h>
#include <stdio.h>struct messgruppe
{
char name[32];
float wert[5];
};messgruppe *pMesswerte;
int men_val, check, anzahl_werte, anzahl_gruppen, rest, i, x,tats_gruppen,anzahl_zeilen;
void Eingabe();
void Speichern();
void Auslesen();void main(void)
{
do
{
system("cls"); //clear screen
printf("\n\tH A U P T M E N U E\n");
printf("-----------------------------\n");
printf("<1>\tEingabe der Messwerte\n");
printf("<2>\tSpeichern der Messwerte\n");
printf("<3>\tAuslesen der Messwerte\n");
printf("<0>\tProgramm beenden\n");do
{
printf("\nAuswahl: ");
check = scanf("%d",&men_val);
fflush(stdin);if(!check)
printf("\nFehlerhafte Eingabe!!!\n");
}while(!check); //entspricht check == 0switch(men_val)
{
case 1: //eingabe
Eingabe();
break;
case 2: //in datei speichern
Speichern();
break;
case 3: //von datei lesen und ausgeben
Auslesen();
break;
case 0:
if(pMesswerte != NULL)
free(pMesswerte);
break;
default:
printf("Bitte eine Zahl von 0 bis 3 eingeben!");
break;
}
}while(men_val!=0);
}/* FUNCTIONS ##############################################*/
void Eingabe()
{
system("cls");
do
{
printf("\nAnzahl der Messwerte: ");
check = scanf("%d",&anzahl_werte); //check: fehlercode für ganzzahlüberprüfung...wird 0 oder 1
fflush(stdin);if(!check)
printf("\nFehlerhafte Eingabe!!!\n");
}while(!check); //entspricht check == 0rest = anzahl_werte % 5;
anzahl_gruppen = anzahl_werte/5;if(rest==0)
{
pMesswerte = (messgruppe*) calloc(anzahl_gruppen,sizeof(messgruppe));
tats_gruppen = anzahl_gruppen;
}
else
{
pMesswerte = (messgruppe*) calloc(anzahl_gruppen+1,sizeof(messgruppe));
tats_gruppen = anzahl_gruppen + 1;
}for(i = 0; i < anzahl_gruppen; i++) //durchlaufen der vollständig zu befüllenden gruppen
{
printf("\n\nName der %d. Gruppe: ",i+1);
scanf("%s",&pMesswerte[i].name);for(x=0; x<5; x++)
{
do
{
printf("\tWert %d: ",x+1);
check = scanf("%f",&pMesswerte[i].wert[x]);if(!check)
printf("Fehlerhafte Eingabe");
} while(!check);
}
}if(rest!=0)
{
printf("\n\nName der %d. Gruppe: ",anzahl_gruppen+1);
scanf("%s",&pMesswerte[anzahl_gruppen].name);for(i = 0; i < rest; i++)
{
do
{
printf("\tWert %d: ",i+1);
check = scanf("%f",&pMesswerte[anzahl_gruppen].wert[i]);if(!check)
printf("Fehlerhafte Eingabe");
} while(!check);
}for(i = 4; i > rest-1; i--)
{
pMesswerte[anzahl_gruppen].wert[i] = NULL;
}
}
}void Speichern()
{
//if(pMesswerte == NULL)
if(!pMesswerte)
{
printf("\nBitte zuerst Werte eingeben!\n");
getchar();
}
else
{
FILE *pFile;pFile = fopen("messwerte.txt","w");
for(i=0; i<tats_gruppen; i++)
{
printf(pMesswerte[i].name);
fprintf(pFile,"%s\t%f\t%f\t%f\t%f\t%f\n",pMesswerte[i].name, pMesswerte[i].wert[0] , pMesswerte[i].wert[1], pMesswerte[i].wert[2], pMesswerte[i].wert[3], pMesswerte[i].wert[4]);
}fclose(pFile);
free(pMesswerte);
system("cls");
printf("Daten gespeichert");
getchar();
}
}void Auslesen()
{
FILE *pFile;char c;
pFile = fopen("messwerte.txt","rb");
if(pFile)
{
anzahl_zeilen = 0;do {
c = fgetc (pFile);
if (c == '\n')
anzahl_zeilen++;
}
while (c != EOF);fclose(pFile);
pMesswerte = (messgruppe*) calloc(anzahl_zeilen,sizeof(messgruppe));
pFile = fopen("messwerte.txt","r");
i = 0;
while(!feof(pFile))
{
fscanf(pFile,"%s\t%f\t%f\t%f\t%f\t%f",&pMesswerte[i].name, &pMesswerte[i].wert[0] , &pMesswerte[i].wert[1], &pMesswerte[i].wert[2], &pMesswerte[i].wert[3], &pMesswerte[i].wert[4]);
i++;
}system("cls");
for(i=0; i<anzahl_zeilen; i++)
{
printf("\nGruppenname: %s\n",pMesswerte[i].name);
for(x=0; x<5; x++)
{
break;printf("\tWert %d: %f\n",x+1,pMesswerte[i].wert[x]);
}
}
}
else
{
printf("Datei \"messwerte.txt\" konnte nicht gefunden werden!");
}getchar();
}Danke lg
-
Glaubst du, das liest sich jetzt jemand durch, wenn es weder in Codetags noch vernünftig eingerückt ist?
Außerdem ist fflush(stdin); scheiße. Siehe Forensuche, warum das der Fall ist.
Tipp: Codetag benutzen und Code richtig einrücken.