Tabelle in der Konsole



  • Hi

    ich steh vor einem seltsamen Problem. Unzwar wollte ich einfach nur ein ein mal eins in Tabellenform darstellen.
    Ich habe also einfach schnell den Code eingetippt und war auch mit dem Code zufrieden. Keine Fehlermeldung ok gleich mal getestet.
    Nun wird mir aber die Tabelle nicht komplett angezeigt. Es fehlt der Teil aus der Schleife. Hier mal der Code, vielleicht geht es ja bei euch. Ansonsten steckt irgendwo ein Fehler drinne.

    # include <stdio.h>
    # include <stdlib.h>
    # include <iostream>
    
    int main()
        {
    	int eins, zwei, drei, vier, fünf, sechs, sieben, acht, neun, zehn;
    	int x, y;
    
    	printf( "   |   1   2   3   4   5   6   7   8   9   10\n");
    	printf( "---+-----------------------------------------\n");
    
    	for ( x = 1; x == 10; x = x + 1)
    		{
    		for ( y = 1; y == 10; y = y + 1)
    			{
    			if ( y == 1 )
    				eins = x * y;
    			if ( y == 2 )
    				zwei = x * y;
    			if ( y == 3 )
    				drei = x * y;
    			if ( y == 4 )
    				vier = x * y;
    			if ( y == 5 )
    				fünf = x * y;
    			if ( y == 6 )
    				sechs = x * y;
    			if ( y == 7 )
    				sieben = x * y;
    			if ( y == 8 )
    				acht = x * y;
    			if ( y == 9 )
    				neun = x * y;
    			if ( y == 10 )
    				zehn = x * y;
    			}
    			printf( " %d |  %d  %d  %d  %d  %d  %d  %d  %d  %d  %d\n", x, eins, zwei, drei, vier, fünf, sechs, sieben, acht, neun, zehn);
    		}
    
    	std::cin.get();std::cin.get();
    
    }
    

    Findet ihr den Fehler?



  • Deine for-Schleifen sind falsch:

    for ( x = 1; x == 10; x = x + 1)

    in der mitte steht die Bedingung, ob die Schleife nochmals durchlaufen werden soll. Bei dir wird die Schleife nur durchlaufen, wenn x==10 und das ist nie der Fall.
    Schreibe "x <=10" gleiches bei y



  • Du kannst den Code drastisch reduzieren, indem du aus deinen Variablen eins, zwei usw. einfach ein Array machst...

    P.S.: Es gibt auch ein eigenes Board für Konsolenprogramme. Mit MFC hat das Ganze ja wenig zu tun... 🙂



  • Danke für die Hilfe

    bei den FOR Schleifen hab ich wohl nicht richtig überlegt, obwohl ich es bei den Übungen davor richtig gemacht habe 🙄

    Naja muss halt noch viel üben oder wenn es sich nicht bessert aufhören, obwohl mir das ganze eigentlich Spaß macht.

    Mit Arrays habe ich in VB 2008 mal was ausprobiert. Zu den Arrays komm ich sicher noch in C/C++.

    @matze
    im Konsole Forum hat man mir erzählt ich wäre hier besser aufgehoben, weils ja C7C++ ist :D. Und jetzt sagst du mir wieder was anderes. Werd wohl dann demnächst 2 Threads schreiben, einer ist dann sicher im richtigem Forum 😉

    edit:

    naja mein Code war wirklich nicht soo gut. Hab jetzt aus einem anderen einen Teil übernommen und es Fallen sogar die ganzen Zahlenvariablen weg und es ist alles sauber tabellarisch.

    # include <stdio.h>
    # include <stdlib.h>
    # include <iostream>
    
    int main()
        {
    	int x, y;
    
    	printf( "   |   1   2   3   4   5   6   7   8   9   10\n");
    	printf( "---+-----------------------------------------\n");
    
    	for ( x = 1; x <= 10; x = x + 1)
    		{
    		printf( "%2d |", x);
    		for ( y = 1; y <= 10; y = y + 1)
    			printf("%4d", x * y);
    		printf( "\n");
    		}
    
    	std::cin.get();std::cin.get();
    
    }
    


  • Na ja, man hat dir vermutlich gesagt, dass du im C++-Board besser aufgehoben bist. Das ist schon richtig, da du nur Standard-Mittel benutzt (abgesehen davon, dass man dich dort wohl lynchen wird, weil du printf statt cout benutzt 😃 ), Konsolen-Board war natürlich Quatsch von mir. Hier ist aber das MFC-Board, da geht's (oh Wunder! 😉 ) um die MFC (also Windows-Programmierung mit den Microsoft Foundation Classes).

    Egal, so sieht der Code jedenfalls schon viel schöner aus. Die Einrückung könntest du noch optimieren, und Zählvariablen für for-Schleifen kannst du auch direkt im Schleifen-Header deklarieren, wenn du sie sonst nicht brauchst. Also so:

    for(int x=0;x<=10;x++) {
    

    Außerdem kannst du x um eins inkrementieren, indem du, wie hier zu sehen, "x++" notierst (Postfix-Imkrement-Operator). Das spart wieder ein, zwei Zeichen und schont die Finger beim Tippen! 😉 Außerdem lässt sich eine solche Notation (Postfix "x++" oder Präfix "++x") auch prima in Ausdrücken verwenden.



  • Ja stimmt das kürzt den Code nochmal. Ich benutze bewußt noch C als Programmiersprache, da ich halt später auf C++ übergehen werde. So kenne ich von beiden etwas. Bin mir ziemlich sicher das ich später nur noch C++ benutze, aber schadet ja nicht auch ein wenig C zu können 🙂



  • Dann darfst du aber nicht std::cin benutzen. :p



  • das war bisher das einzigste was ich gefunden habe was die console nach dem programmablauf nicht schließt. hab auch gesehen das es return 0 gibt



  • Chiiter schrieb:

    das war bisher das einzigste was ich gefunden habe was die console nach dem programmablauf nicht schließt. hab auch gesehen das es return 0 gibt

    Ein getchar tut's auch (und es gibt noch weitere Möglichkeiten). Mit return 0 erreichst du eigentlich genau das Gegenteil von dem, was du willst. Du beendest die main-Funktion (und damit dein Programm) und gibst 0 zurück. Da wird also nicht gewartet...


Anmelden zum Antworten