Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Fehlerausgabefunktion funktioniert nicht/Endlosschleife

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
10.01.2016, 07:57 Uhr
~f.-th.
Gast


Das Buch wurde bei den ersten Auflagen, da noch beim "Galileo Press - Verlag", in anderen Programmier-Foren sehr kritisch beurteilt, da der Autor nicht immer ganz sattelfest in C und C++ sein soll. Er hat ja für beide Sprachen Bücher geschrieben.

MfG
f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
10.01.2016, 23:16 Uhr
Hans
Library Walker
(Operator)


Hi,

nun ja, Rheinwerk ist ja der gleiche Verlag wie Gallileo Press, nur das der Name neu ist.
Was den Autor angeht, so hab ich entsprechende Kritiken auch schon gelesen. Es ist aber durchaus möglich, dass die damals kritisierten Punkte inzwischen behoben sind. - Dafür spricht u.a. dass das Buch jetzt schon einige Jahre auf dem Markt ist. Es gab genug ähnliche Titel, die nach einer oder vielleicht auch 2 Auflagen wieder verschwanden.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 10.01.2016 um 23:17 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
17.01.2016, 14:03 Uhr
JohnDoe



Hallo, habe das Buch in der 2. aktualisierten Auflage, könnt ihr mir ein Besseres empfehlen oder etwas wo man es eher/besser lernen kann?

Und ich hätte noch eine Frage zu switch bzw if-else, bei switch und meiner char eingabe konnte ich ja Zahlen (0-9) und alle Buchstaben wählen, Zahlen ab 10 gingen aber nicht. Habe nun zu if und if else gewechselt und int eingabe, dort kann ich auch mehrstellige Zahlen nutzen, allerdings hab ich nun gut 2 Std versucht, dass er Zahlen UND Buchstaben zulässt in dem Menü, bekomme es aber nicht hin.. geht es einfach nicht oder was mache ich falsch?


C++:
int main() {
    
    int eingabe;
    char eingabe2;

do
{
    cout << "Ihre Auswahl: ";
    cin >> eingabe; // hatte etwas wie cin >> eingabe || eingabe2


{

if (eingabe == 1)
{    func1();    }    

else if (eingabe == 2)
{    func2();    }

else if // hier bitte ein Beispiel um Funktion 3 mit einem Buchstaben aufzurufen
{    func3();    }

else
    cout << "Ung\x81ltige Eingabe!\n";

}

}
while(eingabe);

}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
17.01.2016, 18:37 Uhr
~f.-th.
Gast


Die Spielregel was du bei switch wählen kannst, ist meiner Erinnerung mal erweitert worden?

Bei char als Eingabe wie der Bezeichner schon sagt ein Zeichen.

C++:
int main()
{
    char eingabe;

    do
    {
        cout << "\n(1) Zahl als Zeichen\n"
                << "(2) Zahl als Zeichen\n"
        << "(+) Test Addition\n"
                << "(a) Buchstabe\n"
                << "(B) Buchstabe gross\n"
                << "(q) um das Programm zu schliessen.\n";

        cin >> eingabe;
        switch(eingabe)
        {
        case '1':
            cout << "Input war: " << eingabe << endl;
            break;

        case '2':
            cout << "Input war: " << eingabe << endl;
            break;

        case '+':
            cout << "Input war: " << eingabe << endl;
            break;

        case 'a':
            cout << "Input war: " << eingabe << endl;
            break;

        case 'B':
            cout << "Input war: " << eingabe << endl;
            break;


        case 'q':
            eingabe = 0;
            break;

        default:
            cout << "Ungueltige Eingabe!\n";
        }

    }
    while(eingabe);
}


Hab das jetzt nicht alles getestet:
10 Ziffern +
über 50 kleine + grosse Buchstaben +
noch ein paar Zeichen deiner Tastatur.
Da können wir ein Switch mit mehr als 70 Wahlmöglichkeiten bauen. Meiner Meinung nach ist das in der Regel dann schon nicht mehr übersichtlich. Da sollte man nach denken ob es nicht besser anders geht.

Bei switch und int als Eingabe gab es bei alten Compilern eine Grenze bei 127. Höhere Zahlen gingen früher nicht? Die Grenze soll heute nicht mehr so knapp bemessen sein.
Beispiel:

C++:
int main()
{
    int eingabe;

    do
    {
        cout << "\n(1) Zahl als Zeichen\n"
                << "(2) Zahl als Zeichen\n"
                << "(24) Test 2 stellig\n"
                << "(125) Test kleiner 128\n"
                << "(0) um das Programm zu schliessen.\n";

        cin >> eingabe;
        switch(eingabe)
        {
        case 1:
            cout << "Input war: " << eingabe << endl;
            break;

        case 2:
            cout << "Input war: " << eingabe << endl;
            break;

        case 24:
            cout << "Input war: " << eingabe << endl;
            break;

        case 125:
            cout << "Input war: " << eingabe << endl;
            break;


        default:
            cout << "Ungueltige Eingabe!\n";
        }

    }
    while(eingabe);
}


Könnt ja selbst testen ob da mehr geht.



Wenn du mehr willst, kannst du switch ja schachteln.

Wenn du echt die Grenzen von switch finden möchtest, wird es ein wenig unübersichtlich. So ein zwei Boshaftigkeiten kann ich mir da noch vorstellen.


Ausserdem werden heute nur noch relativ wenige Programme ausschliesslich für die Tastaturbedienung geschrieben. Maus oder Touch-Screen sind angesagt. Und da 100 Wahlmöglichkeiten auf einer Seite, die dann auch noch übersichtlich zu bedienen sein soll?
Mit einer 2. "switch-Ebene" hast du dann 10000 Auswahl-Punkte.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
17.01.2016, 18:42 Uhr
~f.-th.
Gast


Der erste Quelltext meines letzten Beitrags ist nicht ganz okay. Da hab ich die falsche Version kopiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
17.01.2016, 19:16 Uhr
JohnDoe



Der erste Quelltext von dir, so hatte ich es, allerdings wollte ich es genau so haben nur eben das man Zahlen über 10 auch nutzen kann also z.B. bis 15 mal gesehen aber auch weiterhin mit m und q andere Funktionen aufrufen kann, das Zweite von dir hab ich auch mit den Zahlen allerdings gehen dort Keine Buchstaben mehr.. wollte eben eine Lösung damit man beides zugleich nehmen kann zb

int eingabe1, char eingabe2
eingabe = eingabe1 + eingabe2

und dann cin eingabe
if (eingabe1 oder eingabe2)

so in etwa dachte ich wäre es eventuell möglich aber wie es scheint geht das gar nicht?


was meinst du mit switch verschachteln? das er wenn man case 2 wählt in einen Anweisungsblock übergeht mit einem weiteren switch in welchem man erneut wählen kann? Glaube damit könnte man sogar mein Problem lösen werde es gleich testen...

Das Maus und Touchpad heutzutage beliebter ist, ist mir durchaus klar, da ich C++ als Hobby also nicht für Schule oder so lerne weis ich nur nicht wo ich sonst anfangen soll.. hab mir die WinApi schon angesehen allerdings denke ich wäre es besser erstmal die Grundlagen zu kennen bevor ich schon mit grafischer Oberfläche und Mausklicks programmiere.

---

Das mit einem switch in nem case vom anderen switch hat nich geklappt da dort gleiche case Zeichen nicht verwendet werden dürfen

Dieser Post wurde am 17.01.2016 um 19:30 Uhr von JohnDoe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
18.01.2016, 01:00 Uhr
Hans
Library Walker
(Operator)


Hi,

@JohnDoe:
wenn ich Dich richtig verstehe, dann willst Du auch Eingaben wie etwa "a1" oder "2b" auswerten können. Dazu wäre es nötig, die Eingaben als String anzunehmen und den String Zeichenweise auseinander zu nehmen bzw. auszuwerten. - Ein Beispiel folgt noch.

@~f.th.:

Zitat von ~f.th.:
Bei switch und int als Eingabe gab es bei alten Compilern eine Grenze bei 127.
Höhere Zahlen gingen früher nicht? Die Grenze soll heute nicht mehr so knapp bemessen sein.
...
Könnt ja selbst testen ob da mehr geht.


Wie soll man das verstehen? - Das bei den alten Compilern maximal 127 cases möglich waren, die innerhalb einer switch-Anweisung stehen konnten, oder das nur Zahlen von 0..127 möglich waren. Letzteres halte ich für ein Gerücht, da z.B. die Messages die innerhalb von Windowsprogrammen ausgewertet werden (WM_COMMAND, etc.), auch aus grösseren Zahlen bestehen, in diesem Fall 16 Bit breit.
Aber die 127+x cases werde ich noch testen...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 18.01.2016 um 01:01 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
18.01.2016, 07:15 Uhr
~JohnDoe
Gast


Meinte nicht a1 und b2, sondern wollte case 1-16 und case s, case q und case m haben.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
18.01.2016, 19:25 Uhr
~f.-th.
Gast



Zitat von Hans:
Hi,


@~f.th.:
[quote ~f.th.]Bei switch und int als Eingabe gab es bei alten Compilern eine Grenze bei 127.
Höhere Zahlen gingen früher nicht? Die Grenze soll heute nicht mehr so knapp bemessen sein.
...
Könnt ja selbst testen ob da mehr geht.


Wie soll man das verstehen? - Das bei den alten Compilern maximal 127 cases möglich waren, die innerhalb einer switch-Anweisung stehen konnten, oder das nur Zahlen von 0..127 möglich waren. Letzteres halte ich für ein Gerücht, da z.B. die Messages die innerhalb von Windowsprogrammen ausgewertet werden (WM_COMMAND, etc.), auch aus grösseren Zahlen bestehen, in diesem Fall 16 Bit breit.

Hans[/quote]

Es gab auch schon OS vor Windows. Die hatten so "seltsame" Grenzen. Damals hatten die 8086 CPU z.B. 64kB Speichersegmente. Nur falls euch mal so etwas älteres über den Weg laufen sollte. Windows vor 3.0 kämpften ja auch noch damit.


So falls du deine Unterlagen gründlicher gelesen hättest John, hättest du auch allein drauf kommen können: http://stackoverflow.com/questions/3019153/how-do-i-use-an-enum-value-on-a-switch-statement-in-c

Es sind auch noch andere Varianten denkbar. Das sollte aber die eleganteren sein.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
19.01.2016, 05:50 Uhr
Hans
Library Walker
(Operator)


Hi,

Zitat von ~JohnDoe:
Meinte nicht a1 und b2, sondern wollte case 1-16 und case s, case q und case m haben.

okay. Dann musst Du aber trotzdem zuerst Strings annehmen und diese dann daraufhin überprüfen, ob sie Ziffern oder Buchstaben enthalten, und diese anschliessend auswerten. Das würde etwa so aussehen:
* Eingabe von Tastatur in einen String einlesen
* String überprüfen, ob er Ziffern oder Buchstaben enthält.
* Wenn Buchstaben, dann case Buchstaben; - vorher ist aber eine Umwandlung (Konvertierung) von string nach char nötig.
* Wenn Ziffern, dann von Ziffernstring in Zahl umwandeln (Funktion stoi) und anschliessend case Zahlkonstante.


Zitat von ~f.th.:
Es gab auch schon OS vor Windows. Die hatten so "seltsame" Grenzen. Damals hatten die 8086 CPU z.B. 64kB Speichersegmente. Nur falls euch mal so etwas älteres über den Weg laufen sollte. Windows vor 3.0 kämpften ja auch noch damit.

Okay, dann war also gemint, dass der Compiler maximal 127 verschiedene cases verarbeiten konnte. Gut, hab ich jetzt verstanden. :-) - Hab deshalb jetzt mal im Handbuch von Turbo-C++ 3.0 von 1992 nachgesehen. Da steht drin, das dieser Compiler keine maximale Obergrenze von case-Werten hat, solange genügend Speicherplatz zur Verfügung steht. Aber im C-89-Standard (Abschnitt oder Kapitel 3.6.4.2) gibt es wohl diese Möglichkeit, wobei es den Compilerherstellern überlassen bleibt (blieb?), wie sie das handhaben. Steht so jedenfalls im Turbo-C++ Handbuch. Ältere Compiler hab ich leider nicht. Zwar ältere Computer, aber dafür hab ich keine Compiler. Aber wenn man wegen der 64KB-Grenze mal so überlegt, dann könnte so eine Obergrenze einen Sinn ergeben... - Andrerseits laufen die verschiedenen cases alle auf sowas hinaus:

Code:
        switch(eingabe)
0038    83 7D FC 01               cmp         dword ptr [ebp-0x4],0x00000001
003C    74 22                     je          L$3
003E    83 7D FC 00               cmp         dword ptr [ebp-0x4],0x00000000
0042    74 08                     je          L$2
0044    83 7D FC FF               cmp         dword ptr [ebp-0x4],0xffffffff
0048    74 2A                     je          L$4
004A    EB 2A                     jmp         L$5


Das sind in diesem Fall 3 cases, deren Code an den Labeln L$2, L$3 und L$4 steht. Bei L$5 steht der Code der default-Anweisung. Und es ist 32-Bit Code. Bei 16-Bit Code müssten die cmp-Befehle 2 Byte weniger haben, sofern an den Befehlen selbst nicht schon irgendwas optimiert ist. Also wäre es eine Frage, wie lang der Code der einzelnen cases ist, um auch bei 64KB Programme mit mehr als 127 cases zu schreiben. Bleibt am Ende halt die Frage, ob man so viele cases wirklich braucht?

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 19.01.2016 um 05:51 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: