Übungsprogramm Hilfe erbeten!!

Schnelle objektorientierte, kompilierende Programmiersprache.
dragonfloez
Beiträge: 92
Registriert: Fr Jan 22, 2010 1:49 pm

Übungsprogramm Hilfe erbeten!!

Beitrag von dragonfloez » Di Feb 02, 2010 12:30 pm

Hallo Leute,
ich stehe gerade bei folgendem Programm auf dem Schlauch, also entweder läuft die Schleife nicht richtig oder das Switch.

Code: Alles auswählen

#include <stdio.h>

int main()
{
    int eingabe[10],i,a=0,b=1;                           /*a= Switch Definierung; b=while Definierung*/


while (b==1){


    printf ("1 Druecken um den Wert 4 anzuzeigen");     /*Auswahl*/
    printf ("2 Druecken um alles anzuzeigen");
    printf ("3 Drucken un zu Beenden");

    printf ("Taetigen Sie Ihre Eingaben\n");
    scanf ("%d", &a);

    switch(a)
{

   case 1:                                               /*Eingaben und nur der Wert 5 soll ausgegeben werden*/
       for (i=0;i<10;i++)
        eingabe[i]=0;


     for (i=0;i<10;i++)
     {
         printf ("%d Tätigen Sie Ihre Eingaben",i);
         scanf ("%d", &eingabe[i]);

         if (eingabe[i]==0)
         {printf ("Beenden");
         break;}
     }


     {if (eingabe[5]!=0)
        printf ("%d, die Werte werden ausgelesen %d\n", i, eingabe[5]);
        else
        break;}


    case 2:                                                 /*Oder es sollen alle Werte sollen Ausgegeben werden*/
        for (i=0;i<10;i++)
        eingabe[i]=0;


     for (i=0;i<10;i++)
     {
         printf ("%d Tätigen Sie Ihre Eingaben",i);
         scanf ("%d", &eingabe[i]);

         if (eingabe[i]==0)
         {printf ("Beenden");
         break;}
     }

        for (i=0;i<10;i++)
        {if (eingabe[i]!=0)
        printf ("%d, die Werte werden ausgelesen %d\n", i, eingabe[i]);
        else
        break;}


     case 3:                                                 /*Soll das Programm auf Wunsch sofort beenden*/
        printf ("Beenden");
        b=0;
        break;
}

}


     return 0;
}


ich will damit ereichen, dass erstens nur ein bestimmter Wert angezeigt oder alle Werte angezeigt werden.

Mein Problem:
Wenn ich case 1 auswähle läuft der komplette Switch durch und es findet keine Abfrage der Auswahl 1,2,3 statt.

Was habe ich falsch gemacht?

Vielen Dank im vorraus und ich haoffe ich habe das Programm halbwegs vernünftig formatiert :)

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Übungsprogramm Hilfe erbeten!!

Beitrag von Dirty Oerti » Di Feb 02, 2010 12:55 pm

Hm oder du bringst mal wieder switch und while ineinander und durcheinander ;)
So auf den erste Blick sieht es eigentlich ganz gut aus, bis auf die Tatsache, dass du wieder keine break;-Anweisungen ans Ende der cases gesetzt hast. (Nur bei case 3 ist eines da.)

Ansonsten: Was genau soll passieren, was passiert wenn du was eingibst?

Zur Formatierung:
Ist schon mal ganz ordentlich, worauf du aber achten solltest ist, dass du logisch zusammengehörige Codeteile in Klammernpaare zusammenfasst (wenn es die Übersichtlichkeit fördert).
Außerdem kann man durch Klammern in Verbindung mit Leerzeilen die Lesbarkeit leicht verbessern:

Code: Alles auswählen


{
//Code
//..
//..
//..
//..
}

{
//anderer Code
//...
//...
{
       //Einschub von Code, der nötig ist, aber nicht wirklich mit dem Code außenrum zu tun hat, z.B. Fehlerüberprüfungen, Arrays initialisieren
}
//...
//...
}


Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

dragonfloez
Beiträge: 92
Registriert: Fr Jan 22, 2010 1:49 pm

Re: Übungsprogramm Hilfe erbeten!!

Beitrag von dragonfloez » Di Feb 02, 2010 1:01 pm

Also wenn ich case 1 auswähle mit option 1, dann läuft das gesamte Switch durch (auch mit break) am ende jedes cases. Es soll aber nur bei Option eins NUR den Wert 5 darstellen und dann eine Auswahl 1,2 oder 3 bereitstellen.

Bei Option 2 soll nur die neuen Eingaben eingegeben und alles ausgegeben werden, dann soll wieder eine Abfrage kommen (1,2,3).

Mit option 3 soll man sofort oder irgendwann das Programm beendet werden können.


VieleN Dank

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Übungsprogramm Hilfe erbeten!!

Beitrag von Xin » Di Feb 02, 2010 1:10 pm

dragonfloez hat geschrieben:Hallo Leute,
ich stehe gerade bei folgendem Programm auf dem Schlauch, also entweder läuft die Schleife nicht richtig oder das Switch.

Code: Alles auswählen

#include <stdio.h>

int main()
{
    int eingabe[10],i,a=0,b=1;                           /*a= Switch Definierung; b=while Definierung*/

    while (b==1)
    {
        printf ("1 Druecken um den Wert 4 anzuzeigen");     /*Auswahl*/
        printf ("2 Druecken um alles anzuzeigen");
        printf ("3 Drucken un zu Beenden");

        printf ("Taetigen Sie Ihre Eingaben\n");
        scanf ("%d", &a);

        switch(a)
        {
            case 1:                                               /*Eingaben und nur der Wert 5 soll ausgegeben werden*/
            {
                for (i=0;i<10;i++)
                eingabe[i]=0;

                for (i=0;i<10;i++)
                {
                    printf ("%d Tätigen Sie Ihre Eingaben",i);
                    scanf ("%d", &eingabe[i]);

                    if (eingabe[i]==0)
                    {
                        printf ("Beenden");
                        break;
                    }
                }

                {                                  // <- Die Klammer ist sinnfrei
                    if (eingabe[5]!=0)
                        printf ("%d, die Werte werden ausgelesen %d\n", i, eingabe[5]);
                    else
                        break;
                }
            }

            case 2:                                                 /*Oder es sollen alle Werte sollen Ausgegeben werden*/
            {
                for (i=0;i<10;i++)
                eingabe[i]=0;

                for (i=0;i<10;i++)
                {
                    printf ("%d Tätigen Sie Ihre Eingaben",i);
                    scanf ("%d", &eingabe[i]);

                    if (eingabe[i]==0)
                    {
                        printf ("Beenden");
                        break;
                    }
                }

                for (i=0;i<10;i++)
                {
                    if (eingabe[i]!=0)
                        printf ("%d, die Werte werden ausgelesen %d\n", i, eingabe[i]);
                    else
                        break;
                }
            }

            case 3:                                                 /*Soll das Programm auf Wunsch sofort beenden*/
            {
                printf ("Beenden");
                b=0;
                break;
            }
        }
    }

    return 0;
}
Vielen Dank im vorraus und ich haoffe ich habe das Programm halbwegs vernünftig formatiert :)
Das ist Dein Programm sauber formatiert, ich habe keine Fehler entfernt.
Ich möchte, dass Du wenn Du eine geschweifte Klammer öffenest danach 2 oder 4 Leerzeichen einfügst. Nicht mal 2 und mal 4. Entweder oder und dann ausschließlich soviele Leerzeichen, wie Du Dich entschieden hast. Schreibst Du eine schließende geschweifte Klammer, so rückst Du diese wieder zurück und schreibst unter ihr weiter - so wie es der Code oben vorgibt.
Und nicht anders. Das ist etwas was man selbst ohne dass man irgendeine Ahnung vom Programmieren hat leisten kann.
Du möchtest, dass wir uns Mühe geben Deinen Code zu verstehen - diese Mühe mache ich mir nicht, wenn Du Dir nicht die Mühe machst, Deinen Code sauber zu schreiben.

Meine Worte hier sind nicht ablehnend Dir gegenüber, Du bist auch nicht im Entferntesten der Erste, der das hört. Die Disziplin den Code sauber zu halten ist aber das absolute Minimum, was man aufbringen muss und die erwarte ich von Dir, wenn Du von mir Hilfe erwarten möchtest.
dragonfloez hat geschrieben:Mein Problem:
Wenn ich case 1 auswähle läuft der komplette Switch durch und es findet keine Abfrage der Auswahl 1,2,3 statt.
Jeder Case-Bereich muss mit einem Break abgeschlossen werden, oder C geht davon aus, dass Du den nachfolgenden Fall ebenfalls durchlaufen möchtest.

Du verlässt mit break immer nur die darüber liegende Schleife oder den darüber liegenden case. Du bist in einem Switch, also verlässt Du den case - aber nicht die Schleife. Ein Case, der nicht mit break verlassen wird, geht in den nächsten Case über.

Beenden bedeutet bei dir also die Bedingung für die Schleife so zu ändern, da Du mit break gar nicht an die Schleife herankommst.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

dragonfloez
Beiträge: 92
Registriert: Fr Jan 22, 2010 1:49 pm

Re: Übungsprogramm Hilfe erbeten!!

Beitrag von dragonfloez » Di Feb 02, 2010 1:24 pm

Also erstmal Danke,
es tut mir leid das ich das noch nicht voll im Griff habe mit der Formatierung. Selbstverständlcih hast du recht das man den Code sauber halten muß. Deshalb habe ich den Fehler mit dem Break übersehen und nicht richtig setzten können. :oops: .

Eine Frage noch zur geschweiften Klammer mit den leer Tipps. Wenn ich das richtig verstanden habe sollen diese so versetzt werden, dass die wo zusammen gehören in einer Linie nach unten stehen?.


Und wie funktioniert das eigentlich, wenn ich anstatt Zahlen Texte einlesen und ausgeben möchte.

Soweit ich weiß funktioniert das nach dem Schema:

Code: Alles auswählen

#include <stdio.h>

int main()
{
       char eingabe[255];

       printf ("Text eingeben:\n");                      /*eingeben*/
       fgets (eingabe,255,stdin);

       printf ("Der Text war:\n%s\n",eingabe);  /* ausgeben */

       return 0;
}
Aber wenn ich das darauf anwende kommt immer ein Fenster wo die stdio.h Befehle drinnen stehen.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Übungsprogramm Hilfe erbeten!!

Beitrag von Xin » Di Feb 02, 2010 1:57 pm

dragonfloez hat geschrieben:Also erstmal Danke,
es tut mir leid das ich das noch nicht voll im Griff habe mit der Formatierung. Selbstverständlcih hast du recht das man den Code sauber halten muß. Deshalb habe ich den Fehler mit dem Break übersehen und nicht richtig setzten können. :oops: .
Das kommt hinzu - nicht nur, dass ich erstmal den Code formatieren muss, um ihn lesen zu können - ich müsste teilweise gar nicht erst versuchen den Code zu verstehen, weil Dir die Fehler selbst auffallen würden.
dragonfloez hat geschrieben:Eine Frage noch zur geschweiften Klammer mit den leer Tipps. Wenn ich das richtig verstanden habe sollen diese so versetzt werden, dass die wo zusammen gehören in einer Linie nach unten stehen?.
Yepp. (Auch wenn ich mit "leer Tipps" nicht verstehe)
Die geschweiften Klammern stehen immer untereinander mit den Befehlen, die in der gleichen Ebene sind. Was innerhalb der Klammern steht wird eingerückt und steht in einer eigenen Ebene.
dragonfloez hat geschrieben:Und wie funktioniert das eigentlich, wenn ich anstatt Zahlen Texte einlesen und ausgeben möchte.

Soweit ich weiß funktioniert das nach dem Schema:

Code: Alles auswählen

#include <stdio.h>

int main()
{
       char eingabe[255];

       printf ("Text eingeben:\n");                      /*eingeben*/
       fgets (eingabe,255,stdin);

       printf ("Der Text war:\n%s\n",eingabe);  /* ausgeben */

       return 0;
}
Aber wenn ich das darauf anwende kommt immer ein Fenster wo die stdio.h Befehle drinnen stehen.
Sorry... aber vielleicht solltest Du hier detailierter schreiben, was Du tust. Ich habe schonmal keine Ahnung was "das" ist, was Du da anwendest oder was ich mir unter "ein Fenster" vorstellen muss. Welchen Titel hat das Fenster, zu welchem Programm gehört es und was hast Du getan, dass dieses Fenster aufgeht?
Bei dem von Dir geschriebenen Programm gehen keine Fenster auf, also wirst Du irgendwas anderes zusätzlich bedienen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

dragonfloez
Beiträge: 92
Registriert: Fr Jan 22, 2010 1:49 pm

Re: Übungsprogramm Hilfe erbeten!!

Beitrag von dragonfloez » Di Feb 02, 2010 2:03 pm

Also, ich meinte verkürzt dieses Programm, dass ich versucht habe so umzuschreiben das ich Text anstatt Zahlen eingeben kann.

Code: Alles auswählen

#define ANZAHL 10

int main()
{
  int eingaben[ANZAHL], i;
  char eingabe[255];

  for (i = 0; i < ANZAHL; i++)
    eingaben[i] = 0;                                               /* jedes Element mit 0 initialisieren */

  for (i = 0; i < ANZAHL; i++)                                /* Werte einlesen */
  {
    printf ("%s. Element: ", i);

    fgets (eingabe,255,stdin, &eingaben[i]);

    if (eingaben[i] == 0)
    {
      printf ("\n--------- Ihre Eingabe: ---------\n");   /* dann schaut es übersichtlicher aus */
      break; /* bei 0 die Schleife abbrechen */
    }
  }

  for (i = 0; i < ANZAHL; i++)                                  /* Werte ausgeben */
  {
    if (eingaben[i] != 0)  /* nur dann, wenn der Wert nicht Null ist, diesen ausgeben */
      printf ("%s. Element: %s\n", i, eingaben [i]);
    else                                                                   /* ansonsten Schleife abbrechen */
      break;
  }

  return 0;
}

Wie gesagt ich würde gerne Texte ein und auslesen können, aber so wie oben geschrieben funktioniert das nicht.

Vielen Dank!!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Übungsprogramm Hilfe erbeten!!

Beitrag von Xin » Di Feb 02, 2010 2:12 pm

dragonfloez hat geschrieben:Also, ich meinte verkürzt dieses Programm, dass ich versucht habe so umzuschreiben das ich Text anstatt Zahlen eingeben kann.
Das Programm oben funktioniert doch!? Du liest Text ein und gibst ihn wieder aus!?

Code: Alles auswählen

    fgets (eingabe,255,stdin, &eingaben[i]);
Was tust Du hier?
dragonfloez hat geschrieben:Wie gesagt ich würde gerne Texte ein und auslesen können, aber so wie oben geschrieben funktioniert das nicht.
Das Programm hier

Code: Alles auswählen

       printf ("Text eingeben:\n");                      /*eingeben*/
       fgets (eingabe,255,stdin);

       printf ("Der Text war:\n%s\n",eingabe);  /* ausgeben */
funktioniert für Texte.

Dein jetzt gepostetes Programm soll wohl eher Integers verbraten!?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

dragonfloez
Beiträge: 92
Registriert: Fr Jan 22, 2010 1:49 pm

Re: Übungsprogramm Hilfe erbeten!!

Beitrag von dragonfloez » Di Feb 02, 2010 2:21 pm

Also bei dem Programm kommt bei mir immer in CODE::Blocks der Fehler _CRTIMP char* __cdecl __MINGW_NOTHROW fgets (char*, int, FILE*); in einem seperatem Fenster stdio.h. Es lässt sich weder Build noch run ausführen.

Was meinst du mit integern verbraten?? und welches Programm nutz du um zu programmieren?

Mfg + Vielen Dank!!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Übungsprogramm Hilfe erbeten!!

Beitrag von Xin » Di Feb 02, 2010 2:54 pm

dragonfloez hat geschrieben:Also bei dem Programm
Dem welchen? Du hast mehrere Programme hier am Start.
Ich gehe von dem längeren aus, dass Du zuletzt gepostet hast, wo ich auch nicht verstehe, was Du bei fgets machst.
dragonfloez hat geschrieben:Was meinst du mit integern verbraten?? und welches Programm nutz du um zu programmieren?
In dem letzten Programm willst Du offenbar Integer (ganze Zahlen) verarbeiten (== verbraten). Was willst Du da mit fgets mit 4 Parametern, obwohl fgets nur 3 Parameter erlaubt?

Da willst Du scheinbar ein Integer... obwohl Du die ganze Zeit davon redest, Texte einzulesen.
Ich habe keinen Plan, was Du da vorhast - der Thread geht darum, dass Du Texte einlesen möchtest, dazu passt das Programm nicht. Also musst Du in klaren Sätzen erläutern, was Du tun willst und zwar so, dass nirgendwo unbekannte Bezüge wie "der will nicht, was ich will" darin vorkommen. Wer ist er, was willst Du?

Wenn Du eine Frage hast beschreibst Du, was Du erwartest, das passieren soll und was Dein Programm stattdessen macht und lieferst alle Informationen: vor allem Fehlermeldungen des Compilers.


Ansonsten programmiere ich mit GCC unter Linux, Mac und Windows, sowie zusätzlich Visual Studio unter Windows.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten