Heftiges Programm?
-
ah, ok, dann ist das natürlich einleuchtend, warum das so nicht klappen wollte. hat zwar ne neue zeile gemacht, aber trotzdem in der alten weitergeschrieben.
Vielen, vielen Dank, du hast mir wirklich super geholfen!!!!!!
Jetzt muss ich das programm erstmal koomplett durcharbeiten und verdauen, aber ich denke, für nen totalen einsteiger ist das doch schon ganz guthier nochmal der komplette code, falls sich irgendwer für interessiert
#include <stdio.h> int i,e,a; int n[13]; void speichern(void) { FILE *save = fopen("noten.dat","w+b"); if( !save ){ fprintf(stderr,"Kann \"noten.dat\" nicht öffnen!\n"); return; } for (i=0; i<=13; i++) { fprintf(save, "%i\r\n", n[i]); } fclose(save); } void ausgabe(void) { FILE *output = fopen("noten.dat","r+b"); if( NULL == output ) { fprintf(stderr,"Kann \"noten.dat\" nicht öffnen!\n"); } for (i=0; i<=13; i++) { fscanf(output,"%i ",&n[i]); } /*for(i = 0; i <= 13; ++i) { printf("%.1f..: %i\n", 1.0 + i/3.0, n[i][1]); //bei interesse einfach wieder eingliedern... }*/ printf("\n\nHistogramm:\n\n"); printf("|"); for (i=0; i<=13; i++) { if (n[i]>=20) printf(" %i",n[i]); else printf(" "); } printf("\n"); for (a=19; a!= 0; --a) { printf("|"); for (i=0; i<=13 ; i++) { if (n[i]>=a) printf(" *"); else printf(" "); } printf("\n"); } printf("|--+--+--+--+--+--+--+--+--+--+--+--+--+\n"); printf(" 0 1 2 3 4 5 6 7 8 9 10 11 12\n\n\n"); fclose(output); } void eingabe(void) { for(i = 0; i < 13; ++i) do { printf("%.1f..:" , 1.0 + i/3.0); scanf("%i", &e); n[i] = e; } while (i>=13); printf("\n Eingabe gespeichert! \n\n"); speichern(); } int main (void) { int wahl; do { printf("Was wollen sie machen:\n\n"); printf("-1- Neue Datensaetze eingeben\n"); printf("-2- Datensaetze im Histogramm ausgeben\n"); printf("-3- Programm beenden\n\n"); printf("Wahl: "); do { scanf("%d", &wahl); } while(getchar() != '\n'); switch(wahl) { case 1 : eingabe(); break; case 2 : ausgabe(); break; case 3 : printf("...Programm wird beendet\n"); break; default: printf(">> %d << ???\n",wahl); } }while(wahl != 3); return 0; }
-
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: 4if( 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 3if( condition ) { code( ); }
- Whitesmiths Style
Bekanntgeworden durch Beispiele, welche dem Whitesmiths C - Compiler beilagen.
Tab-Size: 8, selten 4if( condition ) { code( ); }
- GNU Style
Benutzt im GNU EMACS und in der FSF (Free Software Foundation) und nirgendwo anders.
Tab-Size: 4if( 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... :pGreetz, Swordfish