beep system
-
hi ich programmiere gerade eine beep/keyboard ähnliches teil zum üben es funtz zwar aber aus irgenteingrund daurt es immer before ich wieder ein sound machen kann... hier is das programm, was mach ich falsch oder warum is das so?:
int main() { if (kbhit() && (getch()==27)) { return 0; } if (kbhit() && (getch()==59)) { Beep(200,150); } if (kbhit() && (getch()==60)) { Beep(400,150); } if (kbhit() && (getch()==61)) { Beep(600,150); } return main(); }
-
tingle schrieb:
...
1. Nutze schleifen, hier sind rekursive Aufrufe fehl am Platz.
2. main sollte niemals im Programmcode aufgerufen werden.
3. Wird in einem Singlethread-Programm jeder Aufruf linear ausgeführt (Sprich ein Aufruf blockiert bis er fertig ist den eigentlichen Programmfluß). Du solltest dir dirs vor allem mal bezüglich deiner vielen Funktionsaufrufe in deinen ifs überlegen (zumal hier ein switch ohnehin besser wäre). Spiel mal im Gedanken durch was es für dein Programm bedeutet...cu André
-
void meinthread (void *parameter) { Beep (((std::pair *) parameter)->first, ((std::pair *) parameter)->second); } //---------------------------------------- int main () { std::pair </*var1*/, /*var2*/> Ton; while (kbhit ()) { switch (getch ()) { case 'C': Ton.first = tonhoehe; Ton.second = tonlaenge; _beginthread (NULL, meinthread, (void *) &bla, 0); //bin mir hier nicht mehr ganz sicher ^^ //außerdem wird es auch sehr viel bessere varianten geben... vll sind if else konstrukte auch besser - da kann man wenigstens variablen drin deklarieren break; //etc default: return EXIT_SUCCESS; } }; }
-
ah danke dann mach ichs so ^^ noch ne frage ich will das alles übern numpad machen und nicht über F1,F2,F3, ect... was sind die zahlen bzw wo find ich die zahlen für die keys?
-
in der msdn glaub ich...
ansonsten einfach so:while (kbhit ()) { std::cout << getch () std::endl; Sleep (100); };dann merkste dir, was du drückst und was auf der konsole erscheint ^^ geht am schnellsten - allerdings wird das ja meist über defines bzw const int`s gemacht... also hast du dann nur den wert - das sollte sich zwar die nächsten tage nicht gleich ändern aber doof isses trotzdem ^^
-
habs hingekriegt ^^ ma ne andere frage ich brauch ein if comparison das check ob das was die person eingibt eine zahl is oder nicht:
int main() { cout << "-----------------------------------\n"; cout << "---- Tingle's Frequency Tester ----\n"; cout << "-------- Press Esc to Exit --------\n"; cout << "-----------------------------------\n\n"; int b; int a; b = 1; while (b=1) { cout << "Please enter a Frequency: "; cin >> a; Beep (a,300); cout << "\nBeep at " << a << " Frequency\n\n"; } return 0; }ich will das da ein if is ob a eine nummer is oder ein buchstabe und wenn es was anderes is als eine nummer soll es eine nachricht bringen also ein error
-
mm i got it but what can i do in the if statment to check if int a is a number because when ever i typ in letter my programm starts going wild
int main() { cout << "-----------------------------------\n"; cout << "---- Tingle's Frequency Tester ----\n"; cout << "-----------------------------------\n\n"; int b; int a; b = 1; while (b=1) { cout << "Enter a Frequency: "; cin >> a; if (a == ) { Beep (a,300); cout << "\nBeep at " << a << " Frequency\n\n"; } else { cout << "\nError :: Not a legal variable\n\n"; } } return 0; }
-
if (cin.fail()){ cout << "An error occured!" << endl; cin.clear(); }
-
thx it works but no it doesnt now the message comes but it loops in an error for some reson take a look:
#include "stdafx.h" using namespace std; int main() { cout << "-----------------------------------\n"; cout << "---- Tingle's Frequency Tester ----\n"; cout << "-----------------------------------\n\n"; int b; int a; b = 1; while (b=1) { cout << "Enter a Frequency: "; cin >> a; if (a >= 0) { Beep (a,300); cout << "\nBeep at " << a << " Frequency\n\n" << endl; } if (cin.fail()) { cout << "Error, only numbers are legal\n\n" << endl; cin.clear(); } } return 0; }
-
ah nevermind i know why because it keeps the integer saved in a... how to i clear
-
#include <iostream> using namespace std; int main() { cout << "-----------------------------------\n" << "---- Tingle's Frequency Tester ----\n" << "-----------------------------------\n\n"; int a; while (true) { cout << "Enter a Frequency (-1 to quit): "; cin >> a; if (cin.fail()) { cout << "Error, only numbers are legal\n\n" << endl; cin.clear(); } else if (a >= 0) { Beep (a,300); cout << "\nBeep at " << a << " Frequency\n\n" << endl; } else { if (a == -1) break; cout << "Only numbers greater or equal than zero allowed\n\n" << endl; } } }
-
nope as soon as you typ in a number it loops/crashes
-
um i mean character
-
cin.ignore(); may help. Or cin.ignore(1000);
Or something like string sth; cin >> sth; just to get rid of the rest. But it is unclean.
-
@tingle_: deutsch zu schreiben wurde wohl auf die Dauer langweilig? ; )
-
lol^^
sry^^ ich bin bilangual auf gewachsen ich merks meinstens garnicht vorallem im i-net hehehe
-
^^ np - mein englisch is gerad noch gut genug um das zu verstehen ;o) aber in nem deutschen forum isses wahrscheinlich besser, deutsch zu schreiben (man bekommt schneller antworten etc ^^)
-
^^, mal ne frage ich check das ganz net mit switch und so... könnt mir jemand ein template(skellet) her schreiben für das was ich machen will? das sind die tasten codes die töne erzeugen sollen:
(alles nummpads ^^)
0 = 48
1 = 49
2 = 50
3 = 51
4 = 52
5 = 53
6 = 54
7 = 55
8 = 56
9 = 57
-
ah egal ich habs ^^ funtzt ja supper... nur ne frage gibt es ein command das die aktuele zeile gelöscht wird bzw das was angezeigt wird? weil 20x \b funtzt nur in so fern wie nix länger is als das vorherige
-
das was angezeigt wird
versteh die frage nicht -.-
std::cout << "text" << varialbe << /*...*/ << std::endl;geht zum anzeigen eigtl immer ganz gut fand ich ^^
zum zeile löschen gibts mit sicherheit auch was - aber da müsstest du wahrscheinlich mal unter improved console gucken - hab ich kA von ^^