Dein originaler Code (natürlich ohne das Semikolon) funktioniert bei mir sehr gut. Allerdings muss ich die Funktion "tolower" über "ctype.h" einbinden. Warum ist das denn bei dir in der "stdio.h"?
Gruß
Abdulkadir Topal
Dein originaler Code (natürlich ohne das Semikolon) funktioniert bei mir sehr gut. Allerdings muss ich die Funktion "tolower" über "ctype.h" einbinden. Warum ist das denn bei dir in der "stdio.h"?
Gruß
Abdulkadir Topal
Zitat von xmmsIch muss nochmal nerven
Zu deinem Code, Uli kommt dann das raus, wenn man einen nicht bekannten Buchstaben eingibt, z.B. f. Dann soll default ausgeführt werden.
Das ganze passiert aber 2 Mal :roll: , wie an an der Ausgabe oben sieht
Passiert bei mir auch, aber auch, wenn ich einen bekannten Buchstaben eingebe, einen Fehler kann ich aber auch nicht entdecken.
Ist do nicht eigentlich nur dazu da, dass die schleife, selbst wenn sie nicht wahr ist, zumindest einmal ausgeführt wird? Wäre doch in diesem Fall überflüssig, weil menu ja am anfang eh ' ' zugewiesen wird.
edit:
also bei mir funzt es nur mit
bei menu=tolower(getchar()), menu=getchar() und cin.get(menu) kriegi ch den besagten Fehler.
cin ist bei meinem dev-cpp in iostream deklariert, jetzt fragt mich nicht, ob und wo das bei einem/eurem C-compiler der Fall ist. :?
Aber eigentlich wäre viel interessanter zu wissen, warum es nicht richtig funktioniert!? :wink:
edit2:
vergisst es, cin >> menu; macht den fehler auch, wenn man einen unbekannten buchstaben eingibt :roll:
Hallo Leute,
das Problem bei Euch ist vielleicht die verwendete getChar() Funktion. Oft muß man den Buchstaben und danach Enter drücken. Das heißt, es sind zwei (!) Zeichen im Eingabepuffer. Die gedrückte Taste und der Return(#13)- oder Linefeed(#10)-Character, der ebenfalls durch die Schleife geht. Vorschlag für folgende Änderung:
#include <stdio.h>
int main()
{
char menu = ' ';
do
{
printf ("Gib einen Befehl ein: ");
menu = tolower(getchar());
switch(menu)
{
case 'a':
blablatudas();
break;
case 'q':
blablatudies();
break;
case 'u':
blablatujenes();
break;
case 'c':
printf("Bye!\n");
break;
case '\r', '\n': /* ignore spurious whitespaces */
break;
default:
printf("Häääh?\n");
}
} while(menu != 'c'); /* c = cancel */
}
Alles anzeigen
Zitat von A.TopalDein originaler Code (natürlich ohne das Semikolon) funktioniert bei mir sehr gut. Allerdings muss ich die Funktion "tolower" über "ctype.h" einbinden. Warum ist das denn bei dir in der "stdio.h"?
Ich hatte es nur vergessen hinzuschreiben. Im Programm habe ich ctype.h inkludiert.
Uli Ich werde deinen Code nachher mal probieren - dankeschön
Uli: Ich kriege immer noch eine Doppelausgabe - trotz ignorierung von \r und \n :?
Ok, es liegt an linefeeds, die nach dem Zeichen kommen:
#include <stdio.h>
#include <ctype.h>
int main()
{
char menu = ' ';
do
{
printf ("Gib einen Befehl ein: ");
do
{
menu = tolower(getchar());
} while(menu == '\n'); /* eat all linefeeds */
switch(menu)
{
case 'a':
printf("Eingabe: a\n");
break;
case 'q':
printf("Eingabe: q\n");
break;
case 'u':
printf("Eingabe: u\n");
break;
case 'c':
printf("Bye!\n");
break;
default:
printf("Häääh? %d \n", menu);
}
} while(menu != 'c'); /* c = cancel */
}
Alles anzeigen
Das funktioniert! Habe sogar extra MinGW Developer Studio angeworfen
Das funktioniert wunderbar - vielen Dank
Bei Golem.de gibt es den Eintrag:
Buch über C-Programmierung zum kostenlosen Download (Link)
Zitat von Golem.deDer Download umfasst rund 8,5 MByte, wobei das Buch im HTML-Format vorliegt, so dass es im Browser betrachtet werden kann. Im Buchhandel ist der Titel (ISBN 3-89842-643-2) mit 1.116 Seiten für 39,90 Euro zu haben. (js)
[Blockierte Grafik: http://img215.imageshack.us/img215/3636/firefoxbutton8us.png]
__________________________
Gruß, gammaburst
Kenn ich schon
Ich finde eBooks als HTML aber blöde. Die kann man nicht gut ausdrucken und die Klickerei geht mir dabei auch auf die Nerven