Heftiges Programm?



  • int i, a, e; // würd ich nicht global lassen
    
    // ...
    
    void ausgabe(void) {
        FILE *output = fopen( "noten.dat", "r+b" );
        if( !output ) {
            fprintf( stderr, "Kann \"noten.dat\" nicht öffnen!\n" );
            // hier würd' ich and einer statt abbrechen:
            return;
        }
    

    So, jetzt musst dir nur noch einen eindeutigen Bracing-Style zulegen, richtig "intenden" und schon hast du fertig. Meine Gratulation

    Greetz, Swordfish



  • Swordfish schrieb:

    So, jetzt musst dir nur noch einen eindeutigen Bracing-Style zulegen, richtig "intenden" und schon hast du fertig. Meine Gratulation

    Greetz, Swordfish

    lol, bitte was? o.O
    ok, das mit dem return ist keine schlechte idee, muss ich wohl einfach vergessen haben ?. aber was bedeutet das andere?!?



  • Bracing-Style: Du sollst dir einen Stil zulegen, wie du die geschweiften Klammern anordnest, und den konsequent durchziehen.

    Indentation: Zu deutsch Einrückung.

    Beides ist bei dir noch Kraut und Rüben 😉



  • aaah! ok, ja, das feintuning wollte ich eh noch machen, hab ja noch fast 4 wochen Zeit mit der abgabe, lol 🙂
    mal gucken, wenn ich's überarbeitet habe, poste ich's nochmal, dann könnt ihr mir mal sagen, was ihr davon haltet . thxthxthx!!!



  • so, mal gucken, ob ich jetzt richtig "intended" hab ^^

    #include <stdio.h>												//Standard-Input-Output Funktion
    int i,e,a;														//Dekalrieren der Variablen
    int n[13];														//Deklariern des Eindimensionalen Arrays fuer die Noten
    int wahl;														//Deklarieren der Variablen "Wahl"
    
    void speichern(void)										//Unterfunktion Speichern
    	{
    	FILE *save = fopen("noten.dat","w+b");						//Datei "noten.dat" oeffnen und ueberschreiben
    	if( !save )													//wenn dies nicht möglich ist
    		{
    		fprintf(stderr,"Kann \"noten.dat\" nicht oeffnen!\n");	//gebe dies aus
    		return;													//und gehe wieder zum anfang zurueck
    		}
    
    	for (i=0; i<=13; i++)										//ansonsten nehme i und arbeite damit den array durch
    		{														//i steht fuer je eine Zahl im array
    		fprintf(save, "%i\r\n", n[i]);							//und schreibe das zeilenweise in die datei
    		}
    
    	fclose(save);												//schliesse Datei
    	}
    
    void ausgabe(void)											//Unterfunktion Ausgabe
    	{
    	FILE *output = fopen("noten.dat","r+b");					//oeffne Datei "noten.dat" mit leseberechtigung
    	if	( NULL == output )										//falls nicht vorhanden
    		{
    		fprintf(stderr,"Kann \"noten.dat\" nicht oeffnen!\n");	//gebe das aus
    		return;													//und gehe zum anfang zurueck
    		}
    	for (i=0; i<=13; i++)
    		{
    		fscanf(output,"%i ",&n[i]);								//lese die zahlen aus der datei zeilenweise
    		}														//und ordne sie in das array ein
    			printf("\n\nHistogramm:\n\n");						//gebe die ueberschrift aus
    
    	printf("|");												//und dann in der ersten zeile Zeile:
    	for (i=0; i<=13; i++)										//ueberpruefe jede zahl, ob diese groesser oder
    	{															//gleich 20 ist und gebe dann entweder die komplette
    		if (n[i]>=20)											//Zahl
    			printf(" %i",n[i]);
    		else
    			printf("   ");										//oder eine Leerzeile aus
    	}
    	printf("\n");												//wechsele in die naechste zeile
    
    	for (a=19; a!= 0; --a)										//beginne un in der 19. Zeile und arbeite dich nach unten
    		{
    		printf("|");											//jeweils am anfang ein |
    		for (i=0; i<=13 ; i++)									//arbeite den array durch
    			{
    			if (n[i]>=a)										//und gebe wenn benoetigt ein sternchen
    				printf("  *");
    			else
    				printf("   ");									//oder eine leerzeile aus
    			}
    		printf("\n");											//und wechsele dann in die naechste Zeile
    	}
    	printf("|--+--+--+--+--+--+--+--+--+--+--+--+--+\n"); 		//x-Achse des Histogramms
    	printf("   0  1  2  3  4  5  6  7  8  9  10 11 12\n\n\n");	//und die Beschriftung
    	fclose(output);												//Schliesse nun die Datei wieder
    	}
    
    void eingabe(void)											//Unterfunktion Eingabe
    	{
    	for(i = 0; i < 13; ++i)										//arbeite dich wieder durch das array
    		do
    			{
    			printf("%.1f..:" , 1.0 + i/3.0);					//Beginne bei Note 1.0 und addiere immer i/3.0
    			scanf("%i", &e);									//lese Die Zahl ein
    			n[i] = e;											//und fuege sie dem array zu
    			}
    		while (i>=13);											//solange bis i>=13 ist
    		printf("\n Eingabe gespeichert! \n\n");					//Gebe aus:
    	speichern();												//fuehre nun die speichern-Funktion durch
    	}
    
    int main (void)												//Hauptmenue
    	{
    	do
    		{
    		printf("Was wollen sie machen:\n\n");					// ausgabe des Hauptmenues
    		printf("-1- Neue Datensaetze eingeben\n");
    		printf("-2- Datensaetze im Histogramm ausgeben\n");
    		printf("-3- Programm beenden\n\n");
    		printf("Wahl: ");										//ausgabe der eingabeaufforderung
    		do
    			{
    			scanf("%d", &wahl);									//lese die Eingabe ein und
    			}													//ordne sie der Variablen "wahl" zu
    		while(getchar() != '\n');								//bis zum letzten eingabeteil
    
    		switch(wahl)											//"wahl-Funktion"
    			{
    			case 1 : eingabe();									//Bei 1 fuehre Funktion "eingabe" aus
    			break;
    
    			case 2 : ausgabe();									//Bei 2 fuehre Funktion "ausgabe" durch
    			break;
    
    			case 3 : printf("...Programm wird beendet\n");		//bei 3 gebe aus, dass das programm beendet wird
    			break;
    
    			default: printf(">> %d << ???\n",wahl);				//bei fehleingabe gebe dies aus
    			}
    		}
    	while(wahl != 3);											//solange wahl ungleich 3 ist
    	return 0;													//ruecklieferungswert
    	}
    


  • abgesehen von meiner persoenlichen abneigung zu diesem stil hast du eine inkonsistenz drin, naemlich beim for-loop nach dem printf("|").

    ein array[13] geht von [0] bis [12]. du benutzt aber [13]...



  • Jaaaaa! Sieht nett aus 😉

    Bracing Styles, just FYI:

    • Kernighan & Ritchie Style

    AKA: 1TBS (One True Brace Style), Kernel Style
    Tab-Size: C: 8, C++/Java: 4

    if( condition ) {
            code( );
    }
    
    • Allman Style

    AKA: BSD Style
    benannt nach Eric Allman, einem Berkeley-Hacker der viele BSD Utilities damit geschrieben hat.
    Tab-Size: C: 8, C++/Java: 4 oder 3

    if( condition )
    {
            code( );
    }
    
    • Whitesmiths Style

    Bekanntgeworden durch Beispiele, welche dem Whitesmiths C - Compiler beilagen.
    Tab-Size: 8, selten 4

    if( condition )
            {
            code( );
            }
    
    • GNU Style

    Benutzt im GNU EMACS und in der FSF (Free Software Foundation) und nirgendwo anders.
    Tab-Size: 4

    if( condition )
      {
        code( );
      }
    

    Die am meisten benutzten sind wohl Allan und Whitesmiths.

    Greetz, Swordfish



  • http://en.wikipedia.org/wiki/One_True_Brace_Style

    ich wuerde whitesmith nicht als "oftbenutzt" bezeichnen. seh den kaum in der wildnis. ich find den aber auch nicht zumutbar.

    ich seh aber sehr oft allman unter den C-lern und k&r unter den PHPlern.



  • ich finde den k+r style absolut ätzend 😡
    immer wenn ich fremden code sehe, der so geschrieben ist, muss ich den umformatieren. sonst blicke ich da nicht durch...



  • @c.crackwitz: ich seh' bei PHP'lern oft _garkeinen_ Stil 😃
    @net: was findest du an k&r so ätzend!? Aber, moment mal, das würd ja heißen du blickst bei meimem Code nicht durch... :p

    Greetz, Swordfish


Anmelden zum Antworten