Heftiges Programm?



  • ok, wenn ich den kompletten struckt also in int mache

    struct {
          int null;
          int eins;
          int zwei;
          ...} noten;
    

    dann habe ich direkt zwei neue probleme:

    1. Bei der eingabeabfrage werden, sobalt ich beim ersten wert eine zahl eingebe der zweite übersprungen und mit dem dritten in eine zeile gequetscht. abgefragt wird dann aber nur der dritte.

    2. Das speichern funktioniert nichtmehr:
    Da ich ja dann nichtmehr mit char arbeite, kann ich den befehl:

    fgets(noten.null, sizeof(noten.null), stdin);
    

    ja nichtmehr benutzen, sondern den fgetc(Waszumteufelkommthierrein?);
    wenn ich da nur stdin drin stehen lasse, meckert er nichtmehr, schreibt aber auch nix mehr in meine Datei rein.



  • #include <stdio.h>
    #include <stdlib.h>
    
    struct noten_t {
    	int null;
    	int eins;
    	int zwei;
    	int drei;
    	int vier;
    	int fuenf;
    	int sechs;
    	int sieben;
    	int acht;
    	int neun;
    	int zehn;
    	int elf;
    	int zwoelf;
    };
    
    noten_t noten;
    
    bool speichern( void )
    {
    	FILE *save = fopen( "noten.dat", "w+b+a+" );
    
    	if( !save ) {
    		fprintf( stderr, "\"noten.dat\" konnte nicht geöffnet werden!\n" );
    		return false;
    	}
    
    	if( fwrite( &noten, sizeof( noten ), 1, save ) != 1 ) {
    
    		fprintf( stderr, "Fehler beim schreiben in \"noten.dat\"!\n" );
    		fclose( save );
    		return false;
    	}
    
    	fclose(save);
    	return true;
    }
    
    bool ausgabe( void )
    {
    	FILE *input = fopen( "noten.dat", "r+b" );
    
    	if( !input ) {
    		fprintf( stderr, "\"noten.dat\" konnte nicht geöffnet werden!\n" );
    		return false;
    	}
    
    	while( fread( &noten, sizeof( noten ), 1, input ) == 1 ) {
    		printf("1.0...: %i\n", noten.null );
    		printf("1.3...: %i\n", noten.eins );
    		printf("1.7...: %i\n", noten.zwei );
    		printf("2.0...: %i\n", noten.drei );
    		printf("2.3...: %i\n", noten.vier );
    		printf("2.7...: %i\n", noten.fuenf );
    		printf("3.0...: %i\n", noten.sechs );
    		printf("3.3...: %i\n", noten.sieben );
    		printf("3.7...: %i\n", noten.acht );
    		printf("4.0...: %i\n", noten.neun );
    		printf("4.3...: %i\n", noten.zehn );
    		printf("4.7...: %i\n", noten.elf );
    		printf("5.0...: %i\n", noten.zwoelf );
    		printf("\n\n");
    	}
    
    	fclose( input );
    }
    
    void eingabe( void )
    {
    	printf( "1.0...: " );
    	scanf( "%i", &noten.null );
    
    	printf( "1.3...: " );
    	scanf( "%i", &noten.eins );
    
    	printf( "1.7...: " );
    	scanf( "%i", &noten.zwei );
    
    	printf( "2.0...: " );
    	scanf( "%i", &noten.drei );
    
    	printf( "2.3...: " );
    	scanf( "%i", &noten.vier );
    
    	printf( "2.7...: " );
    	scanf( "%i", &noten.fuenf );
    
    	printf( "3.0...: " );
    	scanf( "%i", &noten.sechs );
    
    	printf( "3.3...: " );
    	scanf( "%i", &noten.sieben );
    
    	printf( "3.7...: " );
    	scanf( "%i", &noten.acht );
    
    	printf( "4.0...: " );
    	scanf( "%i", &noten.neun );
    
    	printf( "4.3...: " );
    	scanf( "%i", &noten.zehn );
    
    	printf( "4.7...: " );
    	scanf( "%i", &noten.elf );
    
    	printf( "5.0...: " );
    	scanf( "%i", &noten.zwoelf );
    
    	speichern( );
    	printf( "\nEingabe gespeichert!\n\n" );
    }
    
    int main( )
    {
    	int wahl;
    
    	do {
    		printf( "Was möchten Sie machen:\n\n" );
    		printf("-1- Neue Datensaetze eingeben\n");
    		printf("-2- Datensaetze grafisch 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( "\nDas Programm wird beendet...\n" );
    				break;
    
    			default:
    				printf( ">> %d << ???\n",wahl );
    				break;
    		}
    
    	} while( wahl != 3 );
    
    	return EXIT_SUCCESS;
    }
    

    aber elegant ist der Codehaufen nicht...

    Greetz, Swordfish



  • so, ich bin heute mal ein bischen fleißig gewesen und mein programm funktioniert (fast)
    ich arbeite jetzt mit einem array, was mir ne ganze menge arbeit erspart, danke für den tipp!
    hier mal das ganze Programm:

    #include <stdio.h>
    #include <stdlib.h>
    int i,e;
    int n[13];
    
        void speichern(void) {
            FILE *save =fopen("noten.dat","w+b");
            if( NULL == save ){
                save = fopen("noten.dat","w+b");
                if( NULL == save ) {
                    fprintf(stderr,"Kann \"noten.dat\" nicht öffnen!\n");
    
                }
            }
            if(fwrite(&n,sizeof(n), 1, save) != 1) {
                fprintf(stderr, "Fehler bei fwrite...!!!\n");
    
            }
    
            fclose(save);
        }
        void ausgabe(void) {
            FILE *output = fopen("noten.dat","r+b");
            if( NULL == output ) {
                fprintf(stderr,"Kann \"noten.dat\" nicht öffnen!\n");
    
            }
    
            while(fread(&n,sizeof(n), 1, output) == 1) {
    
                printf("1.0..:%i\n", n[0]);
    			printf("1.3..:%i\n", n[1]);
    			printf("1.7..:%i\n", n[2]);
    			printf("2.0..:%i\n", n[3]);
    			printf("2.3..:%i\n", n[4]);
    			printf("2.7..:%i\n", n[5]);
    			printf("3.0..:%i\n", n[6]);
    			printf("3.3..:%i\n", n[7]);
    			printf("3.7..:%i\n", n[8]);
    			printf("4.0..:%i\n", n[9]);
    			printf("4.3..:%i\n", n[10]);
    			printf("4.7..:%i\n", n[11]);
    			printf("5.0..:%i\n", n[12]);
    
    			printf("\n\nHistogramm:\n\n");
    	/*printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=20)
    			{
    				printf("  %i", n[i]);
    			}
    			else
    				printf("   ");
    			printf("\n");*/
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=19)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=18)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=17)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=16)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=15)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=14)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=13)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=12)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=11)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=10)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=9)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=8)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=7)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
    	printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=6)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=5)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=4)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
        printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=3)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
    	printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=2)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
    	printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=1)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    
            printf("|--+--+--+--+--+--+--+--+--+--+--+--+--+\n");
            printf("   0  1  2  3  4  5  6  7  8  9  10 11 12\n");
    
                    }
            fclose(output);
        }
        void eingabe(void) {
    
    		printf("1.0...:");
    		scanf("%i", &e);
    		n[0] = e;
    		printf("1.3...:");
    		scanf("%i", &e);
    		n[1] = e;
    		printf("1.7...:");
    		scanf("%i", &e);
    		n[2] = e;
    		printf("2.0...:");
    		scanf("%i", &e);
    		n[3] = e;
    		printf("2.3...:");
    		scanf("%i", &e);
    		n[4] = e;
    		printf("2.7...:");
    		scanf("%i", &e);
    		n[5] = e;
    		printf("3.0...:");
    		scanf("%i", &e);
    		n[6] = e;
    		printf("3.3...:");
    		scanf("%i", &e);
    		n[7] = e;
    		printf("3.7...:");
    		scanf("%i", &e);
    		n[8] = e;
    		printf("4.0...:");
    		scanf("%i", &e);
    		n[9] = e;
    		printf("4.3...:");
    		scanf("%i", &e);
    		n[10] = e;
    		printf("4.7...:");
    		scanf("%i", &e);
    		n[11] = e;
    		printf("5.0...:");
    		scanf("%i", &e);
    		n[12] = e;
            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 grafisch 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 EXIT_SUCCESS;
    }
    

    mein probleme bestehen jetzt darin, dass bei der ausgabe meines histogramms die schleife anscheinend nicht richtig bearbeitet wird. das programm bearbeitet nur die erste spalte ( n[0] ) und den rest ignoriert es einfach

    eine zeile ausgabe:

    printf("|");
    
    		for (i=0; i>=12; i++);
    			if (n[i]>=1)
    			{
    				printf("  *");
    			}
    			else
    				printf("   ");
    			printf("\n");
    

    desweiteren werden in der datei noten.dat keine wirklichen zahlen gespeichert.
    das programm speichert zwar irgendwas und liest das dann auch wieder als Zahlen aus, aber wenn ich die Datei öffne und mir die zahlen angucken will, stehen die 1. alle in einer zeile (laut aufgabe soll in jeder zeile eine zahl stehen! <- wie krieg ich das hin ??)
    und 2. sieht man nur kästchen anstatt zahlen.
    woran liegt das?
    (kann die kästchen leider nicht mit anzeigen, das forum scheint die nicht zu erkennen?)



  • schlecht. benutze einen for-loop um die sich aehnelnden teile deines codes zusammenzufassen.



  • eine bitte was??
    also, ich weis, was ne for-schleife ist. und da ich mal ganz grob loop mit schleife übersetzen würde, gehe ich davon aus, dass du meinst ich soll eine for-schleife benutzen.

    aber wo soll ich denn da was zusammenfassen?
    kannst du mir da evtl. ein kleines Beispiel geben, das wäre super!



  • printf("1.0..:%i\n", n[0]);
    printf("1.3..:%i\n", n[1]);
    printf("1.7..:%i\n", n[2]);
    printf("2.0..:%i\n", n[3]);
    printf("2.3..:%i\n", n[4]);
    printf("2.7..:%i\n", n[5]);
    printf("3.0..:%i\n", n[6]);
    printf("3.3..:%i\n", n[7]);
    printf("3.7..:%i\n", n[8]);
    printf("4.0..:%i\n", n[9]);
    printf("4.3..:%i\n", n[10]);
    printf("4.7..:%i\n", n[11]);
    printf("5.0..:%i\n", n[12]);
    

    wird zu

    for(i = 0; i < 13; ++i)
        printf("%.1f..: %i\n", 1.0 + i/3.0, n[i]);
    


  • hui, super!

    das ist natürlich um einiges kürzer!
    habe jetzt den ersten teil der ausgabe und den teil der eingabe drastisch verkürzen können. Jetzt versuche ich mich an der ausgabe meines histogramms. leier funtkioniert das nicht so, wie ich es will. hier ist mein code:

    for(a=19; a<=1 ; a=a-1);
    
    	{
        	    printf("|");
    
    		for (i=0; i>=12; i++);
    		{
    		     if (n[i]>=a)
    			{
    				printf("  *");
    			}
    		     else
    			printf("   ");
    		i++;
    		}
    	    printf("\n");
    	    a=a-1;
            }
    

    in der ausgabe sieht das dann so aus:

    |
    |--+--+--+--+--+--+--+
       0  1  2  3  4  5  6
    

    allerdings solletn da 20 striche untereinander sein, nicht nur einer...
    und eben für jede zahl sterne oder ein leerzeile, ich bekomme aber garkeine sternchen angezeitg (abfrage ist 100%ig richtig, hat ja ohne schleife geklappt).
    bsp:

    |
    |        *     *
    |  *     *  *  *     *
    |  *  *  *  *  *     *  *
    |--+--+--+--+--+--+--+--+
       0  1  2  3  4  5  6  7...
    

    wenn ich mir mein "a" ausgeben lasse, bekomme ich auch nur 19 angezeigt. ich habe das gefühl, dass der irgendwo ein problem mit fen for-schleifen hat. liege ich da richtig?
    und wie könnte man das ausbügeln? ich habs schonmal mit do-while schleifen probiert, ich bekam aber das selbe erbebnis. hat jemand ne idee?



  • for(a=19; a<=1 ; a=a-1);[cpp]
    Deine schleife setzt a = 19 und läuft solange a <= 1 ist -> die Schleife läuft garnicht.
    
    Machste so:
    
    [cpp]
    for( a = 19; a != 0; --a );
    
    // oder:
    
    for( a = 19; a >= 0; --a );
    
    // --a bedeutet a = a - 1
    

    Greetz, Swordfish



  • huch, war die for-schleife nicht for(anfangsbedingung; abbruchbedingung; tue diesunddas); ?
    hm, dann schein ich da wohl irgenwas missverstanden zu haben.
    nungut, habe den code verändert, habe aber immernoch fast das selbe problem wie vorher, nur dass er mir jetzt ein sternchen anzeigt...
    code:

    for (a=19; a!= 0; --a);
    
    	{
    		printf("|");
    
    		for (i=0; i>=12; i++);
            {
                 if (n[i]>=a)
                {
                    printf("  *");
                }
                 else
                printf("   ");
            i++;
            }
    
    		printf("\n");
    	}
    

    ergebnis:

    |  *
    |--+--+--+--+--+--+--+--+--+--+--+--+--+
       0  1  2  3  4  5  6  7  8  9  10 11 12
    

    mehr wird nicht angezeigt.



  • du machst:

    for( a = 19; a != 0; --a );
    
    // deutlicher geschrieben:
    for( a = 19; a != 0; --a )
        ; // du tust 19 mal nichts!
    

    nimm mal:

    for( a = 19; a != 0; --a ) {
        // dein code
    }
    

    aber moment mal

    printf("|");
    for (i=0; i>=12; i++);  // hier schon wieder
    {
        if (n[i]>=a)
        {
            printf("  *");
        }
        else
            printf("   ");
        i++;                // ich glaub' du willst
                            // das nicht wirklich
    }
    printf("\n");
    

    nimmste:

    printf("|");
    for ( i = 0; i < 12; i++ ) {
        if( n[ i ] >= a )
            printf("  *");
        else
            printf("   ");
    }
    printf("\n");
    

    Greetz, Swordfish



  • uaaargh, jetzt hab ich erst gesehen, dass ich da ein ";" dahinter hatte... lol. THX Swordfish! ich glaub ich wär daran verzweifelt 🙂
    hier jetzt der aktuellste stand der dinge:

    #include <stdio.h>
    #include <stdlib.h>
    int i,e,a;
    int n[13];
    
        void speichern(void) {
            FILE *save =fopen("noten.dat","w+b");
            if( NULL == save ){
                save = fopen("noten.dat","w+b");
                if( NULL == save ) {
                    fprintf(stderr,"Kann \"noten.dat\" nicht öffnen!\n");
    
                }
            }
            if(fwrite(&n,sizeof(n), 1, save) != 1) {
                fprintf(stderr, "Fehler bei fwrite...!!!\n");
    
            }
    
            fclose(save);
        }
        void ausgabe(void) {
            FILE *output = fopen("noten.dat","r+b");
            if( NULL == output ) {
                fprintf(stderr,"Kann \"noten.dat\" nicht öffnen!\n");
    
            }
    
            while(fread(&n,sizeof(n), 1, output) == 1) {
    
                for(i = 0; i < 13; ++i)
        			printf("%.1f..: %i\n", 1.0 + i/3.0, n[i]);
    
    	printf("\n\nHistogramm:\n\n");
    	printf("|");
    		for (i=0; i>=12; i++) {
    			if (n[i]>=20)
    				printf("  %i", n[i]);
    			else
    				printf("   ");
    		}
    	printf("\n");
    
    	for (a=19; a!= 0; --a)
    	{
    		printf("|");
    		for (i=0;i < 12; 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");
    
                    }
            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 grafisch 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 EXIT_SUCCESS;
    }
    

    Wie bringe ich dem jetzt noch bei, in der Datei noten.dat "wirkliche" (lesbare) Zahlen zu speichern und nicht irgendetwas anderes.
    und wenn möglich bitte so, dass in jeder Zeile eine Zahl steht.



  • fprintf



  • void speichern(void) {
        FILE *save = fopen("noten.dat","w+b");
    
        if( NULL == save ) {                  // (1)
            save = fopen("noten.dat","w+b");  // (2)
            if( NULL == save ) {              // (3)
                fprintf(stderr,"Kann \"noten.dat\" nicht öffnen!\n");
            }                                 // (4)
        }
    
        //...
    }
    

    Wieso versuchst du wenn das öffnen der Datei fehlschlägt (1) nochmals die datei zu öffnen (2) und prüfst nochmals (3)? Außerdem müsstest du die Funktion bei (4) mit return verlassen.

    also:

    void speichern(void) {
        FILE *save = fopen("noten.dat","w+b");
    
        if( !save ) {
            fprintf(stderr,"Kann \"noten.dat\" nicht öffnen!\n");
            return;
        }
    
        //...
    }
    

    Greetz, Swordfish



  • oh, hab ich garnicht bemert! danke für den tipp, habs mal geändert.
    wie benutze ich denn jetzt fprinf um n[i] in sie zu schreiben?

    ich habe mir gedacht, dass es evtl. auch einfach nur daran liegen kann, dass ich ja einen eindimensionalen array genommen habe. bei dem steht ja alles hintereinender... wenn ihc jetzt aber einen mehrdimensionalen benutzen würde, der 1 spalte, aber 13 zeilen hat, müsste das doch klappen, oder?

    *edit*

    habe das gerade mal ausprobiert, bringt aber garnix. ich denke mal, dass ich dann wohl doch auf fprintf zurückgreifen muss.
    aso, hier mal ein screenshot von dem, was in meiner datei gespeichert wird:

    [img] http://www.bilder-hochladen.net/files/6ue-q.jpg [/img]

    das sollten eigentlich zahlen sein ?!?





  • ok, ich habe es mittlerweile geschafft, dass ich in der datei "noten.dat" richtige zahlen speichere. allerdings stehen die immernoch in einer zeile und haben anstatt leerzeilen ein kästchen dazwischen. Ich habe mittlerweile festgestellt, dass das kästchen für mein "\n" gebildet wird. nur, wenn ihc in eine neue Zeile gehen will, wie kann ich das denn sonst machen, ausser mit \n ????

    for ( i=0; i<12;i++) {
    	fprintf(save, "%i\n", n[i][1]); 
    	}
    

    desweiteren werden meine Werte jetzt nichtmehr eingelesen? ich denke, dass ich auch dafür den befehl dann verändern muss, oder?

    *EDIT*

    habe den 2. Teil schon gelöst, bleibt nurnoch die Farge nach den Zeilen 🙂



  • probier mal \r\n oder oeffne die datei als "r" statt "rb"



  • SUper, danke!!! mit \r\n klappt alles. aber, wofür steht da das \r ? im internet finde ich nix dazu ?!



  • \r\n auch bekannt als CR-LF steht fuer carriage return, line feed.

    unix-gebraeuchlich reicht ein \n fuer das was du willst.
    richtiger ist aber \r\n, weil ein \n eigentlich nur in die naechste zeile springt, aber der cursor nicht wieder an den anfang geht. kannst du bei ner telnet session beobachten/ausprobieren, wenn du dir schon mal sockets angeguckt hast.

    dein notepad (nimm einen anderen editor oder gleich hex editor bitte) versteht \n allein nicht und zeigt dreck an.



  • 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 gut 🙂

    hier 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;
    }
    

Anmelden zum Antworten