Benni_CB Geschrieben 22. Mai 2008 Teilen Geschrieben 22. Mai 2008 Hi! Da ich in c++ programmieren noch ziemlich neu bin, wollte ich euch mal fragen, wie ich eigentlich Tasten (z. B. Pfeil hoch, Pfeil runter...) einlesen kann und sie abfragen kann, so wie mit switch oder if. Ich hab schon gehöhrt, dass man sie mit hexadezimalzahlen oder ASCII Zeichen einlesen kann, nur wie??? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 22. Mai 2008 Teilen Geschrieben 22. Mai 2008 getchar; Standardfunktion; liest Buchstaben, Zahlen und den ganzen Mist; buffert; zeigt am Bildschirm; getch; nicht Standardfunktion; liest alles, buffert nicht, zeigt nicht an; getche; nicht Standardfunktion; liest alles, buffert nicht, zeigt am Bildschirm; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benni_CB Geschrieben 22. Mai 2008 Autor Teilen Geschrieben 22. Mai 2008 Schön und gut, wie wäre es mit einem beispielprogramm??? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 23. Mai 2008 Teilen Geschrieben 23. Mai 2008 #include "stdafx.h" #include <conio.h> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int ch; do { ch = _getch(); if (ch == 0xE0) ch = _getch(); cout << ch << endl; } while (ch != 0x1B); getchar(); return 0; } Cursortasten geben zwei Zahlen zurück, zu erst die Sequenzzahl für Pfeiltaste (bei Windows 0xE0 [224], unter linux war es glaub ich was anderes) und dann ihren eigentlichen Code (deswegen das if in der Schleife). Achja: 0x1B (27) == ESC Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benni_CB Geschrieben 23. Mai 2008 Autor Teilen Geschrieben 23. Mai 2008 äm, ich hab das programm in meinen compiler kopiert, dieses _TCHAR wurde nicht deklariert (_TCHAR has not been declared) und der compiler erkennt den header "stdafx.h" nicht Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benni_CB Geschrieben 23. Mai 2008 Autor Teilen Geschrieben 23. Mai 2008 so, habs n bissl umgeändert, den header #include "stdafx.h" weggelassen, das TCHAR* in char* umgewandelt und int _tmain(...) in int main(...) umgeschrieben. Du hast gesagt, dass bei ESC 27 rauskommt, das tut es. Bei anderen Tasten gibt er auch irgendwelche zahlen aus. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 23. Mai 2008 Teilen Geschrieben 23. Mai 2008 (bearbeitet) nuja, war einfach nur ein Projekt, dass ich schnell mit VS 2005 erzeugt hab... Hier ist mal der "Standard": #include <conio.h> #include <iostream> using namespace std; int main(int argc, char* argv[]) { int ch; do { ch = _getch(); if (ch == 0xE0) ch = _getch(); cout << ch << endl; } while (ch != 0x1B); getchar(); return 0; } Sollte gehen. :floet: Edit: Ok, du hast es selber hingekriegt. Fein, dann siehst du den Zahlencode, welche jeder Tastendruck zurückliefert - dann brauchst du jetzt ja nur anhand der Zahl zu reagieren. Bearbeitet 23. Mai 2008 von TDM Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benni_CB Geschrieben 23. Mai 2008 Autor Teilen Geschrieben 23. Mai 2008 jupp, so hab ichs auch, nur beim cout << ch << endl; in cout << ch << endl << "\n"; umgeschrieben, is ja geschmackssache. 2. Problem: ich wollte ganze Wörter einlesen, mit scanf nur in der if abfrage rattert der von oben nach unten durch, also egal was ich eingebe, erst gibt er das erste aus und dann das zweite. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 23. Mai 2008 Teilen Geschrieben 23. Mai 2008 jupp, so hab ichs auch, nur beim cout << ch << endl; in cout << ch << endl << "\n"; endl ist das gleiche wie '\n'. Also mit cout << ch << endl << endl; hast du dann immer noch ne Leerzeile. 2. Problem: ich wollte ganze Wörter einlesen, mit scanf nur in der if abfrage rattert der von oben nach unten durch, also egal was ich eingebe, erst gibt er das erste aus und dann das zweite. Wie jetzt? Du willst mit Scanf Wörter einlesen - das hab ich verstanden. Wo rattert er durch? PS: Weil du ja die Pfeileingaben angesprochen hattest: int main(int argc, char* argv[]) { int ch; do { ch = _getch(); if (ch == 0xE0) ch = _getch(); switch (ch) { case 0x4B: cout << "linker Pfeil" << endl; break; case 0x4D: cout << "rechter Pfeil" << endl; break; case 0x48: cout << "vorderer Pfeil" << endl; break; case 0x50: cout << "hinterer Pfeil" << endl; break; default: cout << "Anderes Zeichen" << endl; } } while (ch != 0x1B); return 0; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benni_CB Geschrieben 23. Mai 2008 Autor Teilen Geschrieben 23. Mai 2008 so, ich hab nach dem scanf zwei if abfragen untereinander geschrieben, und dann is es egal was ich eingebe, gibt der dann erst das obere aus, dann das untere, aber ich wollte, das er das nur bei bestimmten wörtern ausgibt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 23. Mai 2008 Teilen Geschrieben 23. Mai 2008 Kannst du mal den Code posten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benni_CB Geschrieben 23. Mai 2008 Autor Teilen Geschrieben 23. Mai 2008 moment, muss mal eben nen neuen schreiben, hab den alten schon gelöscht Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benni_CB Geschrieben 23. Mai 2008 Autor Teilen Geschrieben 23. Mai 2008 also, bei dem code gibt er immer das erste aus, nie das zweite, auch ein problem #include<stdio.h> using namespace std; int main() { char eingabe [80]; neustart: printf ("\nNochmal?"); scanf ("%s", eingabe); if ("%s", eingabe, "ja") { goto neustart; } if ("%s", eingabe, "nein") { printf ("\nCiau"); } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 23. Mai 2008 Teilen Geschrieben 23. Mai 2008 ihh. Goto ist eklig. die if abfragen sind auch falsch. guckst du: char eingabe [80]; do { printf("\n%s\t\t", "Wort:"); scanf("%s", eingabe); printf("\n%s:\t%s\n", "Eingabe", eingabe); } while (strcmp(eingabe, "nein")!=0); Einlesen, ausgeben und wenn nein eingeben wurde, wird abgebrochen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benni_CB Geschrieben 23. Mai 2008 Autor Teilen Geschrieben 23. Mai 2008 jetzt habsch das gleiche problem wie bei meinen versuchen vorher: 'strcmp' undeclared (first use the funktion) (Each undeclared identifier is reportet only once for each funktion it appears in.) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 23. Mai 2008 Teilen Geschrieben 23. Mai 2008 Hast du <string.h> eingebunden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benni_CB Geschrieben 23. Mai 2008 Autor Teilen Geschrieben 23. Mai 2008 aha, mit string funktioniert es. Aber brauch ich den string immer in den scanf eingaben oder nur, weil er alles wieder ausgiebt ausser nein? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 23. Mai 2008 Teilen Geschrieben 23. Mai 2008 Welchen String? den Formatstring? Das ergebnis von scanf wird in dem Beispiel im Array gespeichert, von daher brauchst du den hier, ja. Und da du ihn ja wieder ausgeben willst, brauchst du ihn auch in der Ausgabe. Wenn du deine Eingaben überprüfen willst, dann musst du auch hier wieder nachschauen, was du eingeben hast, also brauchst du auch da den Array. O.o Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benni_CB Geschrieben 23. Mai 2008 Autor Teilen Geschrieben 23. Mai 2008 So Uschi, ich habs geschnallt. Ein paar if abfragen, ein bisschen üben und es gibt noch Hoffnung für mich. Danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benni_CB Geschrieben 23. Mai 2008 Autor Teilen Geschrieben 23. Mai 2008 und wie kann ich dann das ganze in töne umwandeln? z. B. dass ich ein "Klavier" programmiere, also mit ner if-abfrage und dann irgendwie nen ton dahin reinschreiben oda so Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 26. Mai 2008 Teilen Geschrieben 26. Mai 2008 Ein einfaches Beispiel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benni_CB Geschrieben 27. Mai 2008 Autor Teilen Geschrieben 27. Mai 2008 das is aber in c# und nicht in c++ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 29. Mai 2008 Teilen Geschrieben 29. Mai 2008 Das stört nicht, die Funktionalität ist die selbe. Einfach <winbase.h> und <windows.h> einbinden. btw: bei google findet man auch genug andere Beispiele und Libs. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benni_CB Geschrieben 29. Mai 2008 Autor Teilen Geschrieben 29. Mai 2008 Ja, aber nur bei dem Beispiel von ner anderen Seite hab ich immer noch die probleme, obwohl ich es schon ein bissl abeändert hab code: //**** Programm A12C.CPP Klavier ************************* #include <iostream.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <dos.h> main() { float gf = 500 ; //*** Grundfrequenz **** float f = 0 ; //*** Frequenz ********* while( 1 ) { //*** Endlosschleife ******************************** clrscr() ; //*** Neuaufbau Bildschirm ********* cout << "\nEnde ... ESC" ; cout << "\nSound .... a-k" ; char c = getch() ; f = 0 ; switch( c ) { //*** Abfragen der Eingaben ************************ //*** Programmabbruch ****************************** case 27 : return 0 ; //*** Tonleiter frei nach Bach c,d,e,f,g,a,h,c ***** //*** Auf der Computertastatur von a nach rechts! ** case 'a' : f = gf ; break ; case 's' : f = 1.123*gf ; break ; case 'd' : f = 1.260*gf ; break ; case 'f' : f = 1.335*gf ; break ; case 'g' : f = 1.499*gf ; break ; case 'h' : f = 1.684*gf ; break ; case 'j' : f = 1.892*gf ; break ; case 'k' : f = 2*gf ; break ; } if( f>0 ) { sound( f ) ; //*** Ton mit Frequenz f *** delay( 200 ) ; //*** 200 ms warten ******** nosound() ; //*** Wichtig!!!! ********** } } } und dann zeigt er an: 'sound undeclared... 'delay' undeclared... 'nosound' undeclared... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 30. Mai 2008 Teilen Geschrieben 30. Mai 2008 Hast du einen 16-Bit-Compiler? Dos.h wird meines Wissens jedenfalls nicht bei 32-Bit-Compilern standardmäßig ausgeliefert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.