C Problem



  • Guten Tag zusammen, ich habe vor ein paar tagen angefangen mich mit C auseinander zu setzen...
    ich benütze einen Dev-C/C++ Compiler von bloodshed.
    Folgende 2 Probleme habe ich.

    1. Wenn ich am schluss nicht

    getchar();
    

    eingeben schließt sich das fenster augenblicklich wieder.

    2. Bei einem kleinen Rechenprogramm habe ich auch ein seltsames problem. Hier einmal der code:

    /* bsp2.c */ 
    #include <stdio.h>
    
    main() {
           int x,y;
           printf("\n\t1. R e c h e n p r o g r a m m\n");  /* t = tabulator */
           printf("\nBitte x eingeben :");
           scanf("%i",&x);
           printf("Bitty y eingeben:");
           scanf("%i",&y);
           printf("\n %i + %i ist %i",x,y,x+y);
           printf("\n %i - %i ist %i",x,y,x-y);
           printf("\n %i * %i ist %i",x,y,x*y);
           printf("\n %i / %i ist %i",x,y,x/y);
           printf("\n %i %% %i ist %i",x,y,x%y);
           }
    

    also wenn ich das programm starte, gebe ich für x einen wert ein dann für y und dann schließt sich das MS-DOS fenster. Hab keine Ahnung woran es liegt. Ich habe vor mir C selber beizubringen mit dem Buch : C Programmieren von Anfang an. Autor: Helmut Erlenkoetter.

    Achja eine kleine Frage hätte ich noch 🙄 Wenn man C in Windows programmiert erscheint das Programm immer in der MS-DOS konsole?

    Wäre super wenn ich ein paar antworten bekommen könnte... bin ein totaler anfänger 😞 .



  • 1. Windows verhalten. Wenn dein Programm beendet, denkt Windows, dass du die geöffnete Konsole nicht mehr brauchst und schließt sie demnach. getchar() ist eine Funktion, die ein Zeichen aus dem Standardinput liest, d.h. sobald der Benutzer kein Zeichen mit der Tastatur eingibt, hält das Programm, dann beende das Programm und Windows schließt die Konsole.

    Wie man so etwas verhindert? Ganz einfach, starte das Programm in der Konsole, nicht per Doppelklick, sprich, starte eine Konsole und mach "cd <Pfad zu meinem Projekt>" und dann startest von dort aus das Programm.

    2. Siehe 1

    Wenn man C in Windows programmiert erscheint das Programm immer in der MS-DOS konsole?

    Wo soll es sonst starten? 😕



  • Zitat:

    Wenn man C in Windows programmiert erscheint das Programm immer in der MS-DOS konsole?

    Wo soll es sonst starten? 😕

    erstmal danke für die schnell und hilfreiche antwort.

    Ich meinte damit ob man den programmen zb eine benutzeroberfläche wie zb Word verpassen kann, oder wird sowas ausschließlich mit Delphi gemacht?

    Hab auf diesem gebiet halt "noch" keine Ahnung :).



  • Hi,

    zum Thema "Schließen der Konsole" hätt ich auch noch was aus der FAQ: http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html

    lekos schrieb:

    Ich meinte damit ob man den programmen zb eine benutzeroberfläche wie zb Word verpassen kann, oder wird sowas ausschließlich mit Delphi gemacht?

    Ne, geht auch in C. In diesem Fall mit der WinAPI. Das ist die native Windows Bibliothek. Stilistisch etwas fragwürdig und ich denke für Anfänger eher ungeeignet (in ihrer ganzen Komplexität). Aber dafür enthält die WinAPI auch noch Funktionen für Sound, Netzwerk usw.
    Wie gesagt: Sehr mächtig, aber sehr komplex. Willst du tiefer in die Windows-Programmierung einsteigen, kommst du nicht drum rum. Falls du auch ein Buch suchst, tipp bei Amazon mal Charles Petzold ein. Da gibt's 'nen 1200 (oder noch mehr) Schinken dazu.

    Als Alternative kann ich GTK+ vorschlagen. Ein Toolkit, mit dem man graphische Oberflächen programmieren kann. Geht relativ leicht, da GTK+ sauber designed ist und man (meistens) genug Dokumentation hat. Zudem läuft GTK+ auch auf Unix und ähnlichen Plattformen.

    MfG

    GPC



  • Ok vielen dank für die hilfreichen antworten 😉

    Das Konsolen problem hab ich nun so gelöst

    am schluss

    System("PAUSE");
    

    oder

    getchar(); getchar();
    


  • lekos schrieb:

    System("PAUSE");
    

    oder

    getchar(); getchar();
    

    Oh das ist boese. Wenn möglich solltest du "system()" aufrufe vermeiden und ein doppeltes getchar()?
    Ne das ist auch nicht gut. Vielleicht hast du ja vergessen davor das '\n' aus dem Eingabepuffer zu hohlen?(Weshalb es mit einem getchar() dann nicht geht..) Schaumal da--> http://www.pronix.de/pronix-656.html
    Und falls du mal über fflush(stdin) stolperst, das ist auch schlecht^^



  • Danke für die hilfe 🙂



  • So habe nun noch ein kleines Problem weswegen ich aber nicht unbedingt einen neuen
    Theard eröffnen will... folgender code

    /* selfmade1.c */
    #include <stdio.h>
    
    main() {
           float benzin,km;
           printf("\n\t\tGefahrene Kilometer :          ");
           scanf("%f",km);
           printf("\n\t\tBenzinverbrauch pro 100km :         ");
           scanf("%f",benzin);
           printf("\n Benzinverbrauch ist %f Liter!",benzin*100/km);
           getchar();
           getchar();
           }
    

    so wenn ich es compile und aufrufe klappt es gebe die KM zahl ein und dann kommt ein error :

    PROGRAMMFEHLER :selfmade1.exe hat Fehler verursacht und wird deswegen geschlossen. Starten sie es neu. Ein Fehlerprotokoll wird erstellt.

    wäre erfreut über hilfe 😉



  • Hi
    schau dir deine scanf() funktion nochmals etwas genauer an 😉
    und ja...schreib bitte "int main(void)" und dann "return 0;" am ende.
    das mit dem doppelten getchar hast du ja immernoch drin -..-^



  • /* selfmade1.c */
    #include <stdio.h>
    
    main() {
           float benzin,km;
           printf("\n\t\tGefahrene Kilometer :          ");
           scanf("%f",&km);
           printf("\n\t\tBenzinverbrauch pro 100km :         ");
           scanf("%f",&benzin);
           printf("\n Benzinverbrauch ist %f Liter!",benzin*100/km);
           getchar();
           getchar();
           }
    

    danke für die hilfe 🙂 jetzt müsst es passen oder? , das mit dem doppeltem getchar(); werd ich auch gleich ändern 🙂



  • /* selfmade1.c */
    #include <stdio.h>
    
    int main(void) {
           float benzin,km;
           printf("\n\t\tGefahrene Kilometer :          ");
           scanf("%f",&km);
           printf("\n\t\tBenzinverbrauch pro 100km :         ");
           scanf("%f",&benzin);
           printf("\n Benzinverbrauch ist %f Liter!",benzin*100/km);
           return 0;
           }
    

    danke für die hilfe 🙂 jetzt müsst es passen oder? , so jetzt dürfte alles passen oder :p . naja schließt sich jetzt trotzdem mit dem return 0; und int main (void);

    grml bin wohl zu dumm dafür... schließt sich nachdem ich die 2 eingaben gemacht habe.



  • ließ doch den ganzen thread nochmals, vielleicht wirst du ja erleuchtet 😉



  • lekos schrieb:

    grml bin wohl zu dumm dafür... schließt sich nachdem ich die 2 eingaben gemacht habe.

    das mit den beiden 'getchars' war doch nicht so schlecht, ne?
    mach doch vor das 'return 0' ein 'for(;; ) getchar();'
    dann kannste dein programm (und die konsole) mit'm click auf 'schliessen' beenden.
    :xmas2:



  • Ich würde dir vorschlagen vor getchar(); ein fflush(stdin) zu setzen.
    Das leert deine Tastaturpuffer und getchar() kriegt keine alten ENTER zeichen, die man bei scanf(); eingibt.

    MfG ...



  • ... schrieb:

    Ich würde dir vorschlagen vor getchar(); ein fflush(stdin) zu setzen.

    Und ich würde vorschlagen diesen Vorschlag zu ignorieren, weil: http://www.c-plusplus.net/forum/viewtopic.php?t=39349



  • tactx, du hast mein mitgefuehl.

    "ten", "...": quark.



  • c.rackwitz schrieb:

    tactx, du hast mein mitgefuehl.

    Ach, alles halb so wild 😉



  • tactx, stumpft man nicht mit der zeit arg ab? ich haette schon laengst unzaehlige schlaganfaelle...



  • Ach, man darf das nicht so eng sehen. Wenn ich keinen Nerv dazu habe, dann lass ich es einfach.



  • c.rackwitz schrieb:

    "ten", "...": quark.

    was? das geht...


Anmelden zum Antworten