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 == 0

    switch(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 == 0

    rest = 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.


Log in to reply