Kleines Auswahlmenüproblem
-
Hallo! Ich bin erst anfänger in C++ und stehe vor einem problem:
Ich habe mir zum Ziel gemacht ein kleines programm zu schreiben,
dass ein art kurzes menü darstellt. d.h. also mit dem zeichen "->"
soll über die auswahlen wandern, wie ein auswahlmenü.Ich habe mir zuerst überlegt, dass mit einfachen "cout´s" die auswahl
gestallte, und mit "char a='-'" und "char b='>'" den
auswahlspfeil darstelle.Das ganze Menu wird mit einer "do-while" funktion dargetellt, so das
im "do" die auswahlpunkte stehen, und im "while" mit "case"
es ausgeführt wird.jetzt kommt mein problem, wie ich die tastatur im programm so initialisiere,
dass auf druck der pfeiltasten, die zeichenkette "ab" also
der pfeil "->" über die auswahl wandert.wie findet ihr meine jetztigen überlegungen, und habt ihr vllt eine verständliche lösung für mein vorhaben?
würde mich freuen über antworten, gruss alex.
-
Schreibe es halt so wie du denkst. Die überlegung ist eingentlich in Ordnung.
-
Ich hab das mal so ähnlich für ein Win Konsolenprogramm gemacht:
#include <conio.h> /* irgendeine Funktion, ** wahrscheinlich main() */ int pointer = 1; int zeiger = 0; int auswahl = 0; while(true) { system("CLS"); if(pointer == 1) cout << " 1. Auswahl <---" << endl; else cout << " 1. Auswahl" << endl; if(pointer == 2) cout << " 2. Auswahl <---" << endl; else cout << " 2. Auswahl" << endl; if(pointer == 3) cout << " 3. Auswahl <---" << endl; else cout << " 3. Auswahl" << endl; do { zeiger = getch(); if(zeiger == 224 || zeiger == 0) continue; } while(zeiger != 13 && zeiger != 27 && zeiger != 80 && zeiger != 72); /* 13 ist Enter ** 27 ist Escape ** 80 Cursor hoch ** 72 Cursor runter ** 224 & 0 nehmen eine Sonderstellung ein, ich weiß nurnoch ** das sie das Neuzeichnen und damit das "Flackern" des Menüs ** entgegenwirken sollten */ if(zeiger == 27) return 0; if(zeiger == 72) if(pointer > 1) pointer--; if(zeiger == 80) if(pointer < 3) pointer++; if(zeiger == 13) auswahl = pointer; switch(auswahl) { case 1: funktionsaufruf(); break; case 2: funktionsaufruf(); break; case 3: funktionsaufruf(); break; default: throw "Da ging was schief..."; } auswahl = 0; }Aber ich übernehm jetzt keine Verantwortung, ist schon ne Ewigkeit her damit. Geht auch sicherlich schöner. Aber denk dran: system() Aufrufe sind langsam.
Für weitere Infos zu den Tastaturcodes: Link.
-
Danke Tobias W, das ist genau was was ich wollte, jedoch funktioniert der ausdruck mit der ESC Taste und der ENTER Taste, aber die beim drücken der pfeiltasten
hoch und runter, giebt er ein "abnormal program termination" fehler aus.hab ich da was falsch vertanden?
hilfe währe toll

gruß alex.
-
#include<stdafx.h> #include<iostream> #include<conio.h> using namespace std; void showchoose(int auswahl) { cout << "Ausgewaehlt ist Menueintrag Nr." << auswahl << endl; cin.get(); } int showmenu(int* zpos) { int zeiger; do { if(*zpos>8)*zpos=1; if(*zpos<1)*zpos=8; system("cls"); cout << "Auswahl 1";if(*zpos==1) cout << "<--";cout << endl; cout << "Auswahl 2";if(*zpos==2) cout << "<--";cout << endl; cout << "Auswahl 3";if(*zpos==3) cout << "<--";cout << endl; cout << "Auswahl 4";if(*zpos==4) cout << "<--";cout << endl; cout << "Auswahl 5";if(*zpos==5) cout << "<--";cout << endl; cout << "Auswahl 6";if(*zpos==6) cout << "<--";cout << endl; cout << "Auswahl 7";if(*zpos==7) cout << "<--";cout << endl; cout << "Beenden";if(*zpos==8) cout << "<--";cout << endl; zeiger = getch(); if(zeiger==72)*zpos-=1; if(zeiger==80)*zpos+=1; } while(zeiger != 13 && zeiger != 27); if(zeiger==13)return *zpos; return 8; } int main() { int zpos = 1; int auswahl = 0; do { auswahl = showmenu(&zpos); if(auswahl != 0 && auswahl != 8 && auswahl != 13) showchoose(auswahl); } while(auswahl != 8 && auswahl != 27); return 0; }