Wie komme ich aus der nervigen Schleife raus????



  • Hi,

    danke für die Antworten, aber

    1. Variante) wie und wo im Text soll ich denn while(iIndex!=3) einbringen?

    2. Variante) mit return 0; in der case 3: funktioniert es zwar, aber der Compiler zeigt eine Warnung an, dass der Rest des Textes nie erreicht wird (wird er aber doch?!?); ist return 0; überhaupt ANSI-C oder nur eine Notlösung (wenn eine Warnung kommt sicher eine Notlösung) ?

    Ich hab jetzt gelesen das es mit exit(EXIT_SUCCESS) geht.

    Gibt es noch elegantere Lösungen; können meinetwegen auch gravierende Änderungen im Text sein, man lernt ja nie aus.



  • Ich kann Dir nur empfehlen für Kommentare

    statt:

    "//" immer "/:" zu nehmen.



  • Vielleicht doch noch wer der eine elegante Lösung hat? Hilffeee mein Lehrer bringt mich um.

    ps: @gloreicher_helfer, es heißt wenn schon anstatt // /* */ und nicht /:



  • die lsg von quizzmaster wird er doch akzeptieren denk ich. denke dein lehrer wird sich eher über die funktion

    FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));//Verhindert Schließen
    

    wundern.

    das ist kein ansi C was ihr sicher macht.(oder?)

    ...
    do
    {
    switch(iIndex)
    {
    ...
    }while(iIndex!=3);
    ...
    


  • @ Dill

    Das mit FlushConsole... hab ich aus der FAQ: Da steht es wäre eleganter als das getchar() am ende, um dass Schließen zu verhindern.

    Wusste nicht dass das nicht ANSI-C ist, was ist es denn dann??? Würde mich ja mal interessieren.



  • das ist eine funktion der windows-API.
    wird deinem lehrer noch weniger gefallen als eine compiler-warnung.

    benutz grundsätzlich nur sachen die ihr schon durchgenommen habt.



  • So, einer der sich wenigstens mal mit der Win-API auskennt.

    Wieso wird er sich darüber nicht freuen?
    Was ist so schlecht an der Win-API? Es gibt doch auch ein Buch von Charles Petzold " Windowsprogrammierung mit der Win32 API", was ich übrigens auch habe, aber leider noch zu schwer, da ich mit Zeigern noch nicht klarkomme; übrigens, was ist ein handle?
    Was kann man mit der Win-API machen?
    Gibt es eine Möglichkeit das automatische Schliessen der Konsole zu verhindern, ohne die Win-API oder den Befehl getchar(); ?
    Gibt es auch eine API nur für die Konsole? Habe nämlich im Forum gelesen, dass so einige fragen, ob man in der Win-Console auch Programme mit grafischen Oberflächen machen kann.



  • hmm... return 0; verlässt nur die main Funktion und beendet somit das Programm.
    Was soll daran Notlösungshaft sein?



  • @quizzmaster

    weiß nicht? Habe gedacht es darf nur in jeder Funktion einmal return (); vorkommen. Sonst wäre es nicht mehrt ANSI-C. Na ja egal, es funzt ja.
    Weist du wieso trotzdem eine Warnung kommt?

    @Dill

    Kannst du mir bitte noch meine Fragen zur API beantworten. Danke



  • wenn man in foren auf kostenlosen support hofft sollte man nicht so vorlaut sein, vorallem wenn man nicht mal ein menu programmiert kriegt :p



  • Das war so auch nicht gemeint, ich frage nur schon seit 2 Wochen in allen möglichen Foren und keiner wusste es so richtig.



  • Also die Lösung mit "return 0;" in der switch-Anweisung hätte ich auch bevorzugt - und natürlich ist die ANSI-C, warum sollte das nicht sein?! Nur weil dein Compiler eine Warnung bringt? Das hat nichts zu sagen! Den Abbruch mit "index!=3" herbei zu rufen ist auch elegant - wenn der Aspekt der strukturierten Programmierung im Vordergrund steht, dann nimm diese Lösung. Zum Verdeutlichen der Abbruchbedingung einer while-Schleife hier eine andere Möglichkeit: du definierst eine Variable abbruch mit 0 und setzt sie nur auf 1, wenn der Benutzer das Programm beenden will (ich ziehe dieser Lösung aber das "while(index!=3)" vor). Mal eine andere Frage: wenn du schon eine Menüabfrage mit einem Beenden-Menüpunkt hast, wieso fragst du dann noch einmal explizit ab, ob der Benutzer noch eine Berechnung durchführen will? Finde ich irgendwie doppelt gemoppelt. 😃 Ohne diese 2. Abfrage und mit o.a. "abbruch"-Variable würde der Pseudocode nun so ausschauen:

    #include <stdio.h>
    #include <conio.h>
    #include <ctype.h> //für toupper
    //Deklaration von Funktionen
    int menu();
    int durchschnitt_lagerdauer();
    int lagerumschlagshaufigkeit();
    //Globale Variablen
    int iIndex;
    
    int main(void){
    short int abbruch=0;
    do
    {
    menu();
    switch(iIndex)
    {
    case 1:
      durchschnitt_lagerdauer();
      break;
    case 2:
      lagerumschlagshaufigkeit();
      break;
    case 3:
      printf("Das Programm wird auf ihren Wunsch beendet");
      abbruch=1; // wir wollen beenden
      break;
    default:
      printf("Ungueltige Eingabe");
      break;
    }
    }while(!abbruch); // solange, wie wir nicht beenden wollen
    FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));//Verhindert Schließen
    getch();
    return (0);
    }
    

    1. Wieso wird er sich darüber nicht freuen?
    2. Was ist so schlecht an der Win-API? Es gibt doch auch ein Buch von Charles Petzold " Windowsprogrammierung mit der Win32 API", was ich übrigens auch habe, aber leider noch zu schwer, da ich mit Zeigern noch nicht klarkomme;
    3. übrigens, was ist ein handle?
    4. Was kann man mit der Win-API machen?
    5. Gibt es eine Möglichkeit das automatische Schliessen der Konsole zu verhindern, ohne die Win-API oder den Befehl getchar(); ?
    6. Gibt es auch eine API nur für die Konsole? Habe nämlich im Forum gelesen, dass so einige fragen, ob man in der Win-Console auch Programme mit grafischen Oberflächen machen kann.

    1. Er wird sich nicht darüber freuen, weil es kein ANSI-C ist, sondern OS-spezifisch (Windows). Auch dein getch(); am Ende ist nicht ANSI-C, sondern eine Erweiterung einiger Bibliotheken und Compiler (LCGI / Borland). Benutze statt dessen lieber getchar(), ich sehe keinen Grund, warum du das nicht tun solltest! Vorsicht: wenn du vorher schon einmal ein "char" mit getchar(); eingelesen hast, musst du ein zweites dummy-getchar() hinterher schieben, damit das Carriage-Return-Zeichen überlesen wird (will ich jetzt nicht weiter erklären)!
    2. Es ist nichts Schlechtes an der WinAPI, nur sollte man sie nicht benutzen, wenn man nicht gerade Fenster in Windows programmiert, da plattformabhängig.
    3. Ein Handle ist AFAIK ein Zeiger zu einem von deinem Programm geöffneten Fenster, bin mir jetzt aber nicht mehr so sicher...
    4. Fenster programmieren etc. pp.
    5. Ja, das Programm einfach mittels Befehl in der Windows-Eingabeaufforderung aufrufen 😛
    6. Es gibt nichts, was es nicht gibt. Z.B. die "improved console"...

    Ähm... ich muss weg 😉

    [ Dieser Beitrag wurde am 11.05.2003 um 10:37 Uhr von RTC editiert. ]


Anmelden zum Antworten