C++ Anfänger- Programm funktoniert nicht!



  • Hi,

    Ich hab erst grad mit C++ angefangen und mein Programm funktioniert nicht:

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main(int argc, char *argv[])
    {int Zahl;
    printf("Gib eine Zahl ein : ");
    scanf("%d",&Zahl);
    fflush(stdin);
    printf("\nDie Zahl ist %x. \n",Zahl);
    system("PAUSE");
    return EXIT_SUCCESS;
    }

    Das Ziel ist es einen Dezimal zu Hexadezimalumrechner zu gestalten.

    Kann mir jemand helfen?

    mfG Leo



  • Doch, funktioniert (VS2008). Warum denkst du denn, dass es nicht funktioniert?

    EDIT: Übrigens ist fflush(stdin) böse und sollte durch eine Alternative ersetzt werden (bzw. ist in diesem Programm gar nicht nötig). Siehe http://www.c-plusplus.net/forum/39349

    Und arbeite an deiner Textformatierung, die ist so nicht ganz optimal. 😉



  • Danke es funktioniert doch, vielen Dank!!!!!



  • genoni schrieb:

    Das Programm in der Console spuckt dann nicht die Zahl Hexadezimal aus, sondern es kommt eine Variable wie c oder 4d.

    c und 4d sieht doch gut aus, je nachdem, was du eingegeben hast.

    Gib doch mal ein paar konkrete Beispiele, welche Ausgabe du bei welcher Eingabe erwartest, und welche du bekommst.



  • Sorry, Ich habs jetzt selbst überprüft und die Hexadezimale Darstellung ist richtig!

    Cool mein erstes nützliches Programm!

    Vielen Dank für die Antworten, allerdings habe ich ein neues Problem.

    Ich wollte zu meinem Dezimal zu Hexadezimal eine Codesperre hinzufügen.

    Hier der Text im C Compiler:

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main(int argc, char *argv[])
    int pwd;
    printf("Gib dein Code ein: ");
    scanf("d&",&pwd);
    fflush(stdin);
    printf("\n");
    if(pwd!=7330);
    {system("PAUSE");
    return EXIT_SUCCESS;
    }
    {if(pwd==7330);
    {printf("Gut! Dein Code ist richtig!");
    }
    }
    {int Zahl;
    printf("Gib eine Zahl ein : ");
    scanf("%d",&Zahl);
    fflush(stdin);
    printf("\nDie Zahl ist Hexal : %x. \n",Zahl);
    printf("\nDie Zahl ist Oktal : %o \n", Zahl);

    system("PAUSE");
    return EXIT_SUCCESS;
    }

    Herzlichen Dank im Voraus.

    mfG Leo



  • genoni schrieb:

    if(pwd!=7330); < ==Diese Semikolons müssen weg

    {if(pwd==7330); < ==



  • #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    
    	int pwd;
    	printf("Gib deinen Code ein: ");
    	scanf("%d",&pwd);
    
    	if(pwd!=7330)
    	{
    		printf("Falsch!\n");
    		return EXIT_SUCCESS;
    	}
    
    	if(pwd==7330)
    	{
    		printf("Gut! Dein Code ist richtig!\n");
    	}
    
    	int Zahl;
    
    	printf("Gib eine Zahl ein : ");
    	scanf("%d",&Zahl);
    
    	printf("\nDie Zahl ist Hexal : %x. \n",Zahl);
    	printf("\nDie Zahl ist Oktal : %o \n", Zahl);
    
    	return EXIT_SUCCESS;
    }
    

    Ein wenig unnötiger Code war drin, und die schon bemerkten Fehler. Außerdem in einem scanf ein Schreibfehler.



  • Danke, Ich hab jetzt alles so gemacht wie du gesagt hast.

    Es kommt nach der Code-Eingabe, die Zahl Eingabe. Aber Anstatt die Zahl umzurechnen, schliesst sich das Programm! Was ist jetzt der Fehler?

    mfG Leo

    PS: Tut mir leid dass ich soviele Fragen habe, aber ich habe erst gestern Abend mit der C++ angefangen.



  • Du hast mit C angefangen, nicht mit C++.
    Das Programm endet, weil es ein Konsolenprogramm ist und die Konsole sich ebenso beendet.
    Unter VisualStudio starte dein Programm mit Strg+F5.



  • Vielen Dank, aber irgendwie verstehe ich das nicht ganz.

    Wieso geht denn das Programm zu, bevor die ganze Programmierung durchgelaufen ist?

    Muss ich irgendeinen Code eingeben?

    mfG Leo



  • Wer lesen kann, ist klar im Vorteil.
    Lies dir die 2. Zeile nochmal durch und versuche sie zu verstehen, also Hinweis noch: unter Konsole versteht man in Windows auch das "DOS-Fenster", siehe auch den Forumstitel.



  • Das Programm schließt sich, nachdem die Zahl umgerechnet ausgegeben wurde. Du könntest z.B. eine Schleife machen:

    while(true)
    	{
    			printf("Gib eine Zahl ein : ");
    			scanf("%d",&Zahl);
    
    			printf("\nDie Zahl ist Hexal : %x. \n",Zahl);
    			printf("\nDie Zahl ist Oktal : %o \n", Zahl);
    	}
    


  • Mein Programm sieht jetzt so aus:

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main(int argc, char *argv[])
    {
    int Code;
    printf("Gib bitte den Code ein: ");
    scanf("%d",&Code);

    if(Code!=7330)
    {
    printf("Falsch\n!");
    return EXIT_SUCCESS;
    }

    if(Code==7330)
    {
    printf("Zugriff gew\x84hrt!\n");
    }
    int Zahl;

    while(true)
    {
    printf("Gib eine Zahl ein : ");
    scanf("%d",&Zahl);
    printf("\nDie Zahl ist Hexal : %x. \n",Zahl);
    printf("\nDie Zahl ist Oktal : %o \n", Zahl);
    }

    return EXIT_SUCCESS;
    }

    Sorry wenn ich euch mit meinen fragen langweile, aber es geht trotzdem zu bevor es die Zahl ausgerechnet hat.

    @Wutz

    Sorry aber ich werde auch beim 10 mal Lesen nicht schlau aus deinem Post, ich weiss ja das sich das Programm schliesst, aber wie kann ich das verhindern?

    mfG Leo



  • Starte Dein Konsolenprogramm aus der Konsole!



  • Du weisst was eine Win32-Konsole ist?
    Öffne da dein Programm. Und berichte wie das da funktioniert 👍

    Wenn du mit einer IDE programmierst, hast du da auch oft die Möglichkeit das Programm auf Konsole zu testen.

    Und nimm für deinen Quelltext den C/C++ Button hier, der erste direkt unter den Smilies 👍

    Dann schreibst du C++. Aber C++ sind nur die ersten 3 Zeilen deines Quelltextes, wenn ich nichts übersehen hab. Warum nicht die weiteren? Seid ihr noch nicht so weit? Oder was hindert dich?

    MfG f.-th.



  • #include <cstdlib>
    

    ist unnötig. Wenn du rein in C programmieren willst, ist denke ich

    #include <stdio.h>
    

    die richtige Wahl statt

    #include <iostream>
    using namespace std;
    

    Zu deinem Problem, geh auf Start -> Ausführen (evtl. in den Eigenschaften des Startmenüs einstellen) -> 'cmd', dann hast du die Konsole offen. Dann mit 'cd' in den Ordner, wo deine .exe liegt, wechseln und den vollständigen Dateinamen angeben. Damit geht das Fenster nicht zu, nachdem das Programm beendet wurde.

    In diesem konkreten Fall hast du wahrscheinlich den falschen Code eingegeben. 7330 muss der sein, sonst beendet das Programm nach der Meldung 'Falsch!'.



  • Danke für euere Antworten und Hinweise, sebstverständlich werde ich ab jetzt den Quelltext mit dem (

    ) ausgeben.

    @f.th-
    Ja eben ich hab so ein PDF gedownloadet das mir alles Schritt für Schritt erklärt. Dort stehen eben wahrscheinlich nur die C-Befehle.
    --------------------------------------------------

    @Thuruk

    Vielen Dank für deine Erklärung, noch eines ist mir unklar:
    nach dem cd muss ich den path meiner Datei angeben?

    ---------------------------------------------------

    Bis jetzt habe ich meine Programme immer so aufgemacht:

    1. Ausführen-->Kompileren
    2. Ausführen-->Ausführen

    -------> Das Programm ging als Konsolenprogramm auf.

    Nun mache ich das wieder so, aber es ist fehlerhaft.
    Was ist eigentlich das kompilieren, erstellt es da eine .exe?

    mfG Leo
    PS: Ihr müsst jetzt nicht meinen ich sei ein Unfähiger Computer-Bediener, bis jetzt arbeitete ich immer auf dem Mac und nun habe ich mir per Bootcamp eine Windows-Partition geholt.



  • Nach 'cd' (change directory) muss der Pfad des Ordners, in dem die durch den Compiler und Linker erstellte .exe liegt, angegeben werden.

    Du kannst außerdem eine Verknüpfung am Desktop erstellen, als Pfad C:\Windows\system32\cmd.exe angeben, darauf rechte Maustaste -> 'ausführen in', da den Pfad angeben, damit startet die Konsole in dem gewünschten Ordner.



  • Herzlichen Dank an alle!!!!

    Nun muss man den Code eingeben, dann kommt man soll eine Zahl eingeben und diese wird dann umgerechnet.

    Alles so wie es soll. vielen Dank.

    Nun habe ich aber erneut eine Frage.
    Ich hoffe ihr nehmt mir das nicht übel.

    Nun:

    Das Ziel ist es einen NotenCalculator zu basteln:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    float Gesamtpunktzahl;
    printf("Bitte geben sie die Gesamtpunktzahl ein: \n");
    scanf("%d",&Gesamtpunktzahl);
    
    float r;
    printf("Bitte geben sie ein, welche Punktzahl für eine Sechs nötig ist: \n");
    scanf("%d",&r);
    
    float punktezahleins;
    printf("Bitte geben sie ein, welche Punktzahl für eine Eins nötig ist: \n");
    scanf("%d",&punktezahleins);
    
    float y;
    float erreichtepunktzahl;
    printf("Bitte geben sie ein, welche Punktzahl der Schueler erreicht hat : \n");
    scanf("%d",&erreichtepunktzahl);
    (erreichtepunktzahl*5)=y;
    {
    float Ergebnis;
    while(Ergebnis!=7);
    }
    {
    float Ergebnis;
    float note;
    float r;
    float z;
    float x;
    r=punktezahleins;
    y/r=x;
    x+1=note;
    
    printf("Die note ist %f\n",note);
        return EXIT_SUCCESS;
    }
    }
    

    bei dem Befehl (erreichtepunktzahl*5)=y; gibt es den Fehler

    Non-Ivalue in assigment

    Wie kann ich das verhindern?

    mfG Leo



  • In c++ (wie auch Assembler) ist links immer der Zieloperant angegeben.

    y=(e+5) schreibt den Wert (e+5) in die für y reservierte Speicherstelle und ist daher richtig.


Anmelden zum Antworten