Seite 1 von 1
Verständnis von Scanf und Switch
Verfasst: Mi Mär 27, 2013 7:20 pm
von ZimZalabim
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;
}
Re: Verständnis von Scanf und Switch
Verfasst: Mi Mär 27, 2013 7:30 pm
von Xin
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.
Re: Verständnis von Scanf und Switch
Verfasst: Do Mär 28, 2013 10:00 am
von cplanlos
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)
{
...
}
Re: Verständnis von Scanf und Switch
Verfasst: Do Mär 28, 2013 11:03 am
von Xin
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 ^^
Re: Verständnis von Scanf und Switch
Verfasst: Do Mär 28, 2013 6:31 pm
von ZimZalabim
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;
}
Re: Verständnis von Scanf und Switch
Verfasst: Do Mär 28, 2013 7:33 pm
von Xin
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?
Kannst Du mir/Dir die Bedingung erklären?
Re: Verständnis von Scanf und Switch
Verfasst: Do Mär 28, 2013 9:29 pm
von ZimZalabim
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
Re: Verständnis von Scanf und Switch
Verfasst: Fr Mär 29, 2013 9:36 am
von Xin
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.
Re: Verständnis von Scanf und Switch
Verfasst: Di Apr 09, 2013 8:56 pm
von Orioner
Um das, was Xin zum Ausdruck bringen wollt einmal in klarere Worte zu fassen:
Hierbei handelt es sich (in deinem Fall) um einen Fehler. Richtig wäre folgender Ausdruck:
Vielleicht hilft dir das weiter.
Re: Verständnis von Scanf und Switch
Verfasst: Di Apr 09, 2013 9:50 pm
von Xin
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!
