Heftiges Programm?



  • Achja wenn das ganze dann noch grafisch sein soll, solltest du dich zuerst noch mit der WinApi auseinandersetzten.

    warum das?



  • Weil Winapi Grafik hübscher aussieht als ascii art



  • so, da bin ich wieder. dank eurer tipps und einer langen suche über google hab ich ein programm zusammenbekommen. allerdings habe ich dort einen fehler drin, bei dem ich nicht weis, wie ich den auslöschen kann. und zwar werden die noten als "char" eingelesen. wenn ich sie aber als "char" einlese, dann bekomme ich die fehlermeldung :

    operands of >= have illegal types 'pointer ot char' and 'int'

    das wird definitiv daran liegen, dass ich eben wie gesagt mit char arbeite. wie ich das ganze prigramm jetzt auf int umstelle kapiere ich nicht so richtig.
    wäre super, wenn mir das einer von euch erklären könnte!

    hier mein Programm:

    #include <stdio.h>
    #include <stdlib.h>
    struct {
    	char null[3];
    	char eins[3];
    	char zwei[3];
    	char drei[3];
    	char vier[3];
    	char fuenf[3];
    	char sechs[3];
    	char sieben[3];
    	char acht[3];
    	char neun[3];
    	char zehn[3];
    	char elf[3];
    	char zwoelf[3];
    	} noten;
    	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");
    				//return 0; //EXIT_FAILURE;
    			}
    		}
    		// FILE-Zeiger save auf das Ende der Datei setzen
    		//fseek(save, 0, SEEK_END);
    		//wir schreiben eine note ans ende von "noten.dat"
    		if(fwrite(&noten,sizeof(noten), 1, save) != 1) {
    			fprintf(stderr, "Fehler bei fwrite...!!!\n");
    			//return 0; //EXIT_SUCCESS;
    		}
    		//wir geben unseren FILE-Zeiger wieder frei
    		fclose(save);
    	}
    	void ausgabe(void) {
    		FILE *output = fopen("noten.dat","r+b");
    		if( NULL == output ) {
    			fprintf(stderr,"Kann \"noten.dat\" nicht öffnen!\n");
    			//return 0; //EXIT_FAILURE;
    		}
    		//Wir lesen alle noten aus "noten.dat"
    		while(fread(&noten,sizeof(noten), 1, output) == 1) {
    			printf("1.0...: %s",noten.null);
    			printf("1.3...: %s",noten.eins);
    			printf("1.7...: %s",noten.zwei);
    			printf("2.0...: %s",noten.drei);
    			printf("2.3...: %s",noten.vier);
    			printf("2.7...: %s",noten.fuenf);
    			printf("3.0...: %s",noten.sechs);
    			printf("3.3...: %s",noten.sieben);
    			printf("3.7...: %s",noten.acht);
    			printf("4.0...: %s",noten.neun);
    			printf("4.3...: %s",noten.zehn);
    			printf("4.7...: %s",noten.elf);
    			printf("5.0...: %s",noten.zwoelf);
    			printf("\n\n");
    
    // hier kommt jetzt das gerüst des Histogramms, wie ich es mir vorgestellt habe. bisher ist allerdings nur die erste Zeile bearbeitet, das ist also kein Fehler ;)
    
    			printf("\n\nHistogramm:\n\n|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    		printf("|\n");
    
    		printf("|");
    		if (noten.null>=1)
    			printf(" *");
    		else
    			printf("  ");
    		if (noten.eins>=1)
    			printf("  *");
    		else
    			printf("   ");
    		if (noten.zwei>=1)
    			printf("  *");
    		else
    			printf("   ");
    		if (noten.drei>=1)
    			printf("  *");
    		else
    			printf("   ");
    		if (noten.vier>=1)
    			printf("  *");
    		else
    			printf("   ");
    		if (noten.fuenf>=1)
    			printf("  *");
    		else
    			printf("   ");
    		if (noten.sechs>=1)
    			printf("  *");
    		else
    			printf("   ");
    		if (noten.sieben>=1)
    			printf("  *");
    		else
    			printf("   ");
    		if (noten.acht>=1)
    			printf("  *");
    		else
    			printf("   ");
    		if (noten.neun>=1)
    			printf("  *");
    		else
    			printf("   ");
    		if (noten.zehn>=1)
    			printf("  *");
    		else
    			printf("   ");
    		if (noten.elf>=1)
    			printf("  *");
    		else
    			printf("   ");
    		if (noten.zwoelf>=1)
    			printf("  *\n");
    		else
    			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...:");
    		fgets(noten.null, sizeof(noten.null), stdin);
    		printf("1.3...:");
    		fgets(noten.eins, sizeof(noten.eins), stdin);
    		printf("1.7...:");
    		fgets(noten.zwei, sizeof(noten.zwei), stdin);
    		printf("2.0...:");
    		fgets(noten.drei, sizeof(noten.drei), stdin);
    		printf("2.3...:");
    		fgets(noten.vier, sizeof(noten.vier), stdin);
    		printf("2.7...:");
    		fgets(noten.fuenf, sizeof(noten.fuenf), stdin);
    		printf("3.0...:");
    		fgets(noten.sechs, sizeof(noten.sechs), stdin);
    		printf("3.3...:");
    		fgets(noten.sieben, sizeof(noten.sieben), stdin);
    		printf("3.7...:");
    		fgets(noten.acht, sizeof(noten.acht), stdin);
    		printf("4.0...:");
    		fgets(noten.neun, sizeof(noten.neun), stdin);
    		printf("4.3...:");
    		fgets(noten.zehn, sizeof(noten.zehn), stdin);
    		printf("4.7...:");
    		fgets(noten.elf, sizeof(noten.elf), stdin);
    		printf("5.0...:");
    		fgets(noten.zwoelf, sizeof(noten.zwoelf), stdin);
    		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;
    }
    

    Desweiteren weis ich nicht, wie ich die Ausgabedatei "noten.dat" ordentlich formatiert bekomme ( so dass die noten alle fein säuberlich untereinander stehen und die Anzahl dann dahinter. eventuell noch mit
    1.0 = 5
    1.3 = 7
    1.7 = ...etc



  • Ne daran liegt es nicht! Also an den chars.
    Es liegt daran das du einen pointer (bzw. einen array) mit einer Zahl vergleichen tust.

    noten.null>=1

    Das geht nicht!
    Hab auch nicht den blassesten Schimmer was du damit überhaupt bezwecken willst.

    Aber ich glaube ein paar schleifen hier und da würden dein Programm erheblich lesbarer machen. verscuh mal deine ausgaben in ne schleife zu packen.



  • also, wie ich es in eine schleife packe weis ich jetzt nicht, da ich ja nicht mit i++ arbeiten kann....

    naya, anyway. auf jeden fall wollte ich dies bezwecken:

    lese Datei noten.dat ein
    wenn die erste Zahl darin >=1 ist, gebe ein "*" aus, andererseits drei leerzeilen
    (entspricht dem sprung nach rechts in der ausgabe)
    wenn die 2. Zwahl >=1 ist, gebe ein '+' aus , ...
    halt immer so weiter, bis die reihe durch ist. wenn ich das mit allen mache sollte dann sowas rauskommen:

    |
    |  *     *
    |  *  *  *
    |  *  *  *     *
    |--+--+--+--+--+
       0  1  2  3  4
    

    so soll unsere Ausgabe aussehen.
    aber ich kann mich mal dransetzen und eine schleife basteln, dauert nur ein bischen 🙂



  • http://www.pronix.de/pronix-4.html
    solltest du mal lesen, wirklich.



  • anahnd deren beispielen bin ich ja so weit gekommen. ich hatte eigentlich gehofft das hier jemand sag mach doch einfach dasundas oder versuchs mal so...
    denn dafür gibt es dieses forum doch, oder?
    ich häng mich dabei eben einfach auf und weis weder wonach ich suchen muss, noch, wie ich das dann verwende.



  • Du könntest mal darüber nachdenken, ob du die Struktur noten nicht vielleicht doch lieber als mehrdimensionales Array realisieren solltest. Dann kannst du auch mit "i++ arbeiten".



  • hm, wäre vielleicht zu überlegen. ich muss nur so erstmal den kampf mit dem progremm gewinnen ^^

    ok, eine einzige frage habe ich ncoh und bitte beantwortet mir die nicht mit "hol dir ein buch" oder "googel mal"..

    wie kann ich in meinem sruct auf die einzelnen werte zugreifen?
    ich habe es mal damit versucht, aber das scheint auch nicht zu funktionieren:

    if (noten.null[i]>=1)
    

    ich will ihm im prinzip sagen, dass er überprüfen soll, ob der wert, der unter noten.null gespeichert ist größer oder gleich 1 ist. wie muss ich das formulieren, damit er das auch macht 😕



  • Wandle doch bitte die eingegebenen Werte erst mit

    int value = atoi( eins );
    

    in Integer um! Dann sinngemäß

    if( note.null >= 1 )
        ; // do something
    

    wobei du bitte die null, eins, usw. member von note als Integer deklarierst!

    Greetz, Swordfish



  • 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


Anmelden zum Antworten