Verständnis von Scanf und Switch

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
ZimZalabim
Beiträge: 21
Registriert: So Feb 24, 2013 6:27 pm

Verständnis von Scanf und Switch

Beitrag von ZimZalabim » Mi Mär 27, 2013 7:20 pm

Hallo Zusammen,

mein Programm soll ein einfaches Menue zur auswahl haben. An sich tuts das auch schon nur eben nicht richtig. Ein Beispiel man drückt "a", antwortet das Programm :" a Option A Eingabe: default Eingabe:" Wenn man "c" drückt bricht es ordnugsgemäß ab. Vielleicht hab ich auch nur Tomaten auf den Augen aber ich seh meinen Fehler einfach nicht.
1.) Warum wird wiederhohlt was ich eingegeben hab?
2.) Liest scanf auch das ENTER mit ein, Wenn ja wie kann man das unterbinden?

vielen Dank für eure Hilfe

Code: Alles auswählen

#include <stdio.h>

int main(void)
{
    char auswahl;
    printf("Switch\n------\n");
    printf("Option A | Option B | Beenden C \n");

    do
    {
        printf("Eingabe:\n");
        scanf("%c",&auswahl);
        switch(auswahl)
        {
            case 'a': case 'A':
            {
                printf("Option A\n");
                break;
            }
            case 'b': case 'B':
            {
                printf("Option B\n");
                break;
            }
            case 'c': case 'C':
            {
                printf("Beenden ENDE\n");
                break;
            }
            default:
            {
                printf("default\n");
                break;
            }
        }
    }
    while(auswahl != 'c');
    return 0;
}

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

Re: Verständnis von Scanf und Switch

Beitrag von Xin » Mi Mär 27, 2013 7:30 pm

ZimZalabim hat geschrieben:Hallo Zusammen,

mein Programm soll ein einfaches Menue zur auswahl haben. An sich tuts das auch schon nur eben nicht richtig. Ein Beispiel man drückt "a", antwortet das Programm :" a Option A Eingabe: default Eingabe:" Wenn man "c" drückt bricht es ordnugsgemäß ab. Vielleicht hab ich auch nur Tomaten auf den Augen aber ich seh meinen Fehler einfach nicht.
1.) Warum wird wiederhohlt was ich eingegeben hab?
Du meinst, warum die Konsole den Buchstaben schreibt, den Du tippst?
Du hast ihn eingetippt. ^^
ZimZalabim hat geschrieben:2.) Liest scanf auch das ENTER mit ein, Wenn ja wie kann man das unterbinden?
Gar nicht.
Du kannst es auslesen.

Schau Dir erstmal die Doku zu scanf(), insbesondere den Abschnitt "Fehlerquellen".
Dann schau Dir mal Übergabeparameter aus dem Tutorial an. Und dann überlege Dir, ob Du Dein Programm vielleicht anders organisieren möchtest. :-)

Wenn nicht, solltest Du Dich in NCurses einlesen.
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.

cplanlos
Beiträge: 2
Registriert: Di Mär 26, 2013 10:43 pm

Re: Verständnis von Scanf und Switch

Beitrag von cplanlos » Do Mär 28, 2013 10:00 am

Hi,

du kannst mit der Funktion getch() ein einzelnes Zeichen einlesen ohne es mit der return-Taste bestätigen zu müssen.
Das Zeichen wird dann auch nicht angezeigt. Benötigt aber das Header-File conio.h

Beispiel:

auswahl=getch();

switch(auswahl)
{
...
}

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

Re: Verständnis von Scanf und Switch

Beitrag von Xin » Do Mär 28, 2013 11:03 am

cplanlos hat geschrieben:du kannst mit der Funktion getch() ein einzelnes Zeichen einlesen ohne es mit der return-Taste bestätigen zu müssen.
Das Zeichen wird dann auch nicht angezeigt. Benötigt aber das Header-File conio.h
Das ist - wie NCurses auch - allerdings kein C-Standard.

Trotzdem ein guter Tipp, denn NCurses ist Unix-Only, conio.h ist Windows-Only. Wenn man vermutet, dass der Threadstarter auf Windows unterwegs ist, wird ihm die conio mehr helfen ^^
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.

ZimZalabim
Beiträge: 21
Registriert: So Feb 24, 2013 6:27 pm

Re: Verständnis von Scanf und Switch

Beitrag von ZimZalabim » Do Mär 28, 2013 6:31 pm

Danke erstmal für die Hilfe.
zwischen info: Ich versuch erstmal C-Standart konfom zu programmieren. So ich habs jetzt soweit geschaft das die auswahl funktionert. Nur Beenden kanns noch nicht.
Wenn ich c oder C drücke, erschein zwar "Beenden ENDE", aber die Eingabe wird wieder gestartet. Kann es sein, dass der Buchstabe den ich ein lese nach der Verwendung aus dem Zwischenspeicher gelöscht wird?

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char auswahl;
    printf("switch\n------\n");
    printf("Option A | Option B | Beenden C \n");
    do
    {
        printf("Eingabe:\n");
        do
        {
            scanf("%c",&auswahl);
        }
        while(getchar() != '\n');

        switch(auswahl)
        {
            case 'a':
            case 'A':
            {
                printf("Option A\n");
                break;
            }
            case 'b':
            case 'B':
            {
                printf("Option B\n");
                break;
            }
            case 'c':
            case 'C':
            {
                printf("Beenden ENDE\n");
                break;
            }
            default:
            {
                printf("default\n");
                break;
            }
        }
    }
    while(auswahl != 'c' || 'C');
    return 0;
}

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

Re: Verständnis von Scanf und Switch

Beitrag von Xin » Do Mär 28, 2013 7:33 pm

ZimZalabim hat geschrieben:Wenn ich c oder C drücke, erschein zwar "Beenden ENDE", aber die Eingabe wird wieder gestartet. Kann es sein, dass der Buchstabe den ich ein lese nach der Verwendung aus dem Zwischenspeicher gelöscht wird?

Code: Alles auswählen

    do ...
    while(auswahl != 'c' || 'C');
Kannst Du mir/Dir die Bedingung erklären?
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.

ZimZalabim
Beiträge: 21
Registriert: So Feb 24, 2013 6:27 pm

Re: Verständnis von Scanf und Switch

Beitrag von ZimZalabim » Do Mär 28, 2013 9:29 pm

Ich kann dir zumindest sagen was ich mir damit erhoffe:

Code: Alles auswählen

while(auswahl != 'c' || 'C')
// Solange nicht einkleines oder großes C eingelesen wied soll die schleife // von vorn beginnen, andern falls soll sie abbrechen

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

Re: Verständnis von Scanf und Switch

Beitrag von Xin » Fr Mär 29, 2013 9:36 am

ZimZalabim hat geschrieben:Ich kann dir zumindest sagen was ich mir damit erhoffe:

Code: Alles auswählen

while(auswahl != 'c' || 'C')
// Solange nicht einkleines oder großes C eingelesen wied soll die schleife // von vorn beginnen, andern falls soll sie abbrechen
Du programmierst. Du musst sehr viel genauer lesen, was Du schreibst und darfst das nicht selbst interpretieren.
Da steht:
solange Auswahl ungleich 'c' oder 'C'.
Und jetzt setzen wir mal Klammern:
solange (Auswahl ungleich 'c') oder ('C').
C kennt keine Auflistungen, wo es sich was Aussuchen kann.
'C' ist 67, 67 ist nicht 0. Also ist 'C' immer wahr. Wenn auswahl != 'c', also nicht wahr, ist, dann wird geguckt, ob 'C' wahr ist und 'C' ist immer wahr. Das ist eine Endlosschleife.
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.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

Re: Verständnis von Scanf und Switch

Beitrag von Orioner » Di Apr 09, 2013 8:56 pm

Um das, was Xin zum Ausdruck bringen wollt einmal in klarere Worte zu fassen:

Code: Alles auswählen

while(auswahl != 'c' || 'C');
Hierbei handelt es sich (in deinem Fall) um einen Fehler. Richtig wäre folgender Ausdruck:

Code: Alles auswählen

while(auswahl != 'c' || auswahl != 'C');
Vielleicht hilft dir das weiter.

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

Re: Verständnis von Scanf und Switch

Beitrag von Xin » Di Apr 09, 2013 9:50 pm

Das klingt jetzt vielleicht ein wenig zweideutig - und das ist auch gut so:
Orioner hat geschrieben:Um das, was Xin zum Ausdruck bringen wollt einmal in klarere Worte zu fassen:
Na, vielen Dank! :-D
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