Schaltjahre!

Tutorials.at
Verfügbare Informationen zu "Schaltjahre!"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Kimi - detewe89 - wirthi - exbs
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 6
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Schaltjahre!
  • Letzte Antwort: vor 16 Jahren, 5 Monaten, 20 Tagen, 14 Stunden, 53 Minuten
  • Alle Beiträge und Antworten zu "Schaltjahre!"

    Re: Schaltjahre!

    Kimi - 04.11.2007, 18:01

    Schaltjahre!
    Hi habe folgendes Progamm nun seit langem hin und her hinbekommen bzw. meine frage jetzt wie baue ich in diesem programm eine schleife ein so das ich eine neue berechnung starten könnte.

    Dann noch eine frage was beinhaltet die system ("pause"). Ich kann es mir denken aber ist es nicht besser dies mit getch(); und das return zu entfernen zu schreiben also das ich das system ("pause") wegnehme sowie das return 0 und dafür getch(); schreibe.

    Danke und wie gesagt ich habe da probleme ne Schleife reinzubauen.


    Vielen Dank!!


    Code: #include <stdio.h>

    int main (void)
    {
       int Zahl;
       printf ("Bitte Jahreszahl eingeben:\n");
       scanf ("%d", &Zahl);

       if(Zahl%4==0)
       {
          if(Zahl%100==0)
          {
             if(Zahl%400==0)
             {
                printf("Jahreszahl ist ein Schaltjahr!\n");
                   }
             else
                    {
                        printf("Jahreszahl ist kein Schaltjahr!\n");
                }
            }
            else
            {
                printf("Jahreszahl ist ein Schaltjahr!\n");
            }
        }
        else
        {
            printf("Jahreszahl ist kein Schaltjahr!\n");
        }
     
       system ("pause");
    return 0;
    }



    Re: Schaltjahre!

    detewe89 - 04.11.2007, 18:34


    return 0;

    gehört IMMER zu einem C-Programm, dies ist ein Rückgabewert an das System (bedeutet soviel wie "kein Fehler im Programm").

    Wenn Du anstatt
    Code: system("pause");
    Code: getch();

    schreibst, wird der Bildschirm nicht gelöscht.

    Ich denke, die beste Lösung wäre eine Kombination der beiden Befehle:

    Code: getch();
    system("pause");

    return 0;

    Und nicht vergiss, für getch(); noch die conio.h - Headerdatei mit einzubauen.

    Nachteil Deines Programms ist, dass es nur unter Windows funktionieren wird.

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

    Um das Programm neu zu starten, baust Du einfach eine Schleife ein, die entweder die Main-Funktion neu aufruft:

    Code: if (blablabla)
    {
         main();
    }

    oder Du baust einen Konsolenbefehl ein:

    Code: if (blablabla)
    {
         system("C:/.../schaltjahre.exe");
    }

    Daniel



    Re: Schaltjahre!

    wirthi - 04.11.2007, 19:15


    Detewe hat prinzpiell recht, außer dass main() ja das ist, was unter Pascal das Hauptprogramm ist - das wird gestartet, du könntest es garnicht in einer Schleife lassen (natürlich kann sich aber main rekursiv selber aufrufen - das ist aber vermutlich nicht gemeint).

    Du musst also deine bestehende Funktion umbenennen ("schaltjahr"), innerhalb von main wie beschriebene eine Schleife bauen und dort jeweils "schaltjahr" aufrufen.



    Re: Schaltjahre!

    detewe89 - 04.11.2007, 20:06


    @wirthi:
    Da ist mir bei diesem Problem noch eine Frage an einen Profi wie Dich :) aufgekommen:

    Wenn ich am Ende eines Programms Folgendes schreibe:

    Code:      system("./program");
         return 0;
    }

    Durch den System-Befehl wird ja das Programm neu ausgeführt; wird dann der folgende Befehl (return 0) noch ausgführt und das Programm korrekt beendet oder wird es einfach abrupt abgebrochen?
    Wenn dies der Fall sein sollte: Wie kann ich Programme im Quelltext aufrufen, ohne einen programmiertechnischen Fehler zu machen?

    Danke,
    Daniel



    Re: Schaltjahre!

    wirthi - 04.11.2007, 20:34


    Zitat: > man system
    ....
    system() executes a command specified in command by calling /bin/sh -c command, and returns after the command has been completed.
    Soll heißen: Das aufgerufene Programm wird ausgeführt (wie wenn eine Prozedur aufgerufen worden wäre) und erst wenn es fertig ist kehrt der Aufruf zurück. Folglich wird auch das return 0 im rufenden Programm asgeführt, aber erst "ganz am Schluss".

    Ganz anders hingegen die Funktion exec():
    Zitat: The exec() family of functions replaces the current process image with a new process image.
    Bei Nutzung dieser Routine wird also das laufende Programm abgebrochen und durch das neu zu startende ersetzt. Das return 0 im rufenden Programm wird dann NICHT ausgeführt.



    Re: Schaltjahre!

    exbs - 05.11.2007, 01:01


    kimi hat folgendes geschrieben: Hi habe folgendes Progamm nun seit langem hin und her hinbekommen bzw. meine frage jetzt wie baue ich in diesem programm eine schleife ein so das ich eine neue berechnung starten könnte. Du kannst einfach eine Schleife um deine Ganze Berechnung machen. Code: do{
    /* Rechnung usw. */
    } while( fertig != TRUE );

    Und ich würde an deiner Stelle deine Berechnung auslagern, in eine Funktion. Dadurch gewöhnst du dir zugleich auch einen besseren Stil an.

    Ich würde dir aber von Systembef. wie "system( )" abraten, da sie nicht sehr sicher sind. Hier bei diesem Bsp. nicht, aber bei komplexeren Sachen ist es besser, wenn du dir eine Variante aussuchst, die deine Programmiersprache dir zur Verfügung stellt. Denn es ist nicht gesagt, dass dein Aufruf auch so funktioniert, wie du das denkst. Was zu einem unbestimmten Verhalten führen kann. Mal ganz abgesehen davon, dass es höchst unportabel ist.

    (Deswegen auch, "getchar" und nicht "getch", denn es ist in der "stdio.h" enthalten!)



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    Hello World - gepostet von icewulf24 am Mittwoch 03.10.2007
    Schaltungsrechner - gepostet von niki1 am Sonntag 25.02.2007
    ich habe diese taste nicht { - gepostet von gandalf am Donnerstag 10.08.2006
    Micrsoft Visual C++ Kompilieren - gepostet von Cookie am Freitag 03.11.2006
    atoi (Fehler: cast ??) - gepostet von exbs am Mittwoch 20.12.2006
    Asseblercode? - gepostet von detewe89 am Freitag 01.06.2007
    GETC - gepostet von Martix391 am Dienstag 06.06.2006
    c/c++? - gepostet von pYp am Montag 04.09.2006



    Ähnliche Beiträge wie "Schaltjahre!"