Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Problem bei Zeichenübergabe mit Autoenter

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 <
000
01.04.2008, 22:47 Uhr
totengräber



Hallo erstmal,

ich habe hier ein problem bei dem ich auch nach Stunden Google suche und Forenlesen einfach nicht weiterkomme. Ich möchte eine Zahl von der Tastatur holen und an an eine if - else auswahl weitergeben, das klappt auch wunderbar aber leider nur mit "cin". Ich möchte aber das ganze über "getch" haben weil da kein enter gedrückt werden muss, und da geht das irgendwie nicht. Wenn ich da eine Zahl eingeb geht das prog sofort auf "else".
Das ist mein Hauptproblem, das kleinere Problem is wie ich die Eingabe von Buchstaben unterbinden kann aber ich währ auch hier für Hilfe dankbar.
Und jetz bitte nicht über den Code lachen aber ich hat nur mal wie ich jetzt festellen muss zwei Jahre unbrauchbares C++ an der Schule und seit 3 jahren nix mehr davon gesehen.

#include <iostream.h>
#include <math.h>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>

int main()

{
char neu;
do
{
double ein ;
double schnaps = 0;
double sekt = 0;
double alkfrei = 0;
double wein = 0;
double pfand = 0;

system("cls");

cout << endl;
cout << "Kirwaboum Osternohe - Mir sin andre Leit" << endl;
cout << endl;
cout << endl;

do
{

cout << "Gib ein Getraenk ein ";

cin>>ein;
// ein = getch();




if (cin >> radius && radius > 0) {


if (ein >=0 && ein <6)
{

if (ein < 2)
{
cout << endl;
cout << "Schnapsmix" << endl;
cout << endl;
schnaps = schnaps + ein*5 ;
}

if (ein > 1 && ein < 3)
{
cout << endl;
cout << "Sekt" << endl;
cout << endl;
sekt = sekt + ein*2;
}

if (ein > 2 && ein < 4)

{
cout << endl;
cout << "Alkoholfrei" << endl;
cout << endl;
alkfrei = alkfrei + ein+0.50;
}

if (ein > 3 && ein < 5)
{
cout << endl;
cout << "Flasche Wein" << endl;
cout << endl;
wein = wein + ein*3;
}

if (ein > 4 && ein < 6)
{
cout << endl;
cout << "Pfandrueckgabe" << endl;
cout << endl;
pfand = pfand + ein-7;
}
}

else
{
cout << "Falsche Eingabe!!!" << endl;
cout << endl;
}

}

while(ein !=0);

cout <<"Kostet " << schnaps+sekt+alkfrei+wein+pfand<< " Euro"<< endl;
cout << endl;

cout << "Neue Berechnung [j/n]:";
cout << endl;
cin >> neu;

}

while(neu !='n');
return 0;


}


Währe schön wenn mir jemand helfen könnte.
Danke schon mal.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.04.2008, 23:32 Uhr
öni




C++:
#include <iostream>
using namespace std;

int main()
{
char neu;
int ein ;
int schnaps = 0;
int sekt = 0;
int alkfrei = 0;
int wein = 0;
int pfand = 0;
int radius=0; //für was ist der da?

do
{

cout << endl;
cout << "Kirwaboum Osternohe - Mir sin andre Leit" << endl;
cout << endl;
cout << endl;

do
{
cout << "Gib ein Getraenk ein ";
cin>>ein

//if (cin >> radius && radius > 0)      //sinlos???? sowieso nicht in der if eine eingabe machen
{
   if (ein >=0 && ein <6)
   {

        if (ein == 1)
         {
         cout << endl;
         cout << "Schnapsmix" << endl;
         cout << endl;
         schnaps = schnaps + ein*5 ;
         }

        if (ein == 2)
         {
         cout << endl;
         cout << "Sekt" << endl;
         cout << endl;
         sekt = sekt + ein*2;
         }

        if (ein == 3)
         {
         cout << endl;
         cout << "Alkoholfrei" << endl;
         cout << endl;
         alkfrei = alkfrei + ein+0.50;
         }

        if (ein == 4)
         {
         cout << endl;
         cout << "Flasche Wein" << endl;
         cout << endl;
         wein = wein + ein*3;
         }

        if (ein == 5)
         {
         cout << endl;
         cout << "Pfandrueckgabe" << endl;
         cout << endl;
         pfand = pfand + ein-7;
         }
     }

     else
     {
       cout << "Falsche Eingabe!!!" << endl;
       cout << endl;
     }

} //if zu
} //do zu
while(ein !=0);

cout <<"Kostet " << schnaps+sekt+alkfrei+wein+pfand<< " Euro"<< endl;
cout << endl;

cout << "Neue Berechnung [j/n]:";
cout << endl;
cin >> neu;


}
while(neu !='n');
return 0;
}


So hab mal dein Code verbessert. Musst in der Schule ja echt nicht viel gelernt haben....
Die includes brauchste net. Die Variabeln können int sein und müssen nicht in der Schleife sein. Deine ganzen Schleifen bitte einrücken und richtige Klammern setzen. If Bedingung geht auch kürzer...aber für den Anfang nicht schlecht...dein Problem konnte ich zwar nicht lösen aber um die Uhrzeit gehe ich jetzt auch lieber ins Bett. Frage ich mich nur noch wie du das compilern konntest das gab bei mir 5 Fehler.

Dieser Post wurde am 01.04.2008 um 23:34 Uhr von öni editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.04.2008, 09:13 Uhr
totengräber



Danke erstmal die schleifen waren wirklich umständlich geschrieben und das radiuszeugs war noch ne Datenleiche aus dem versuch Buchstabeneingaben abzufangen.
Double hab ich als Variable genommen weil ja Kommazahlen vorkommen und int dacht ich kann nur ganze Zahlen, und in der Schleife stehen sie damit bei einem neuen durchlauf wieder alle Variablen auf Null gesetzt werden,weil wenn se ausserhalb stehn wird immer mit den alten Ergebnissen weitergerechnet. Die ganzen includes stammen aus versuchen Enter zu automatisieren.
So und jetzt nochmal sollte eigentlich so gehen nur nicht mit meinen Problemen.


C++:
#include <iostream.h>
#include <math.h>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>

int main()

{
char neu;
do
{
double ein ;
double schnaps = 0;
double sekt = 0;
double alkfrei = 0;
double wein = 0;
double pfand = 0;

system("cls");

cout << endl;
cout << "Kirwaboum Osternohe - Mir sin andre Leit" << endl;
cout << endl;
cout << endl;

do
{

cout << "Gib ein Getraenk ein ";

cin>>ein;
// ein = getch();







if (ein >=0 && ein <6)
{

if (ein == 1)
{
cout << endl;
cout << "Schnapsmix" << endl;
cout << endl;
schnaps = schnaps + ein*5 ;
}

if (ein == 2)
{
cout << endl;
cout << "Sekt" << endl;
cout << endl;
sekt = sekt + ein*2;
}

if (ein == 3)

{
cout << endl;
cout << "Alkoholfrei" << endl;
cout << endl;
alkfrei = alkfrei + ein+0.50;
}

if (ein == 4)
{
cout << endl;
cout << "Flasche Wein" << endl;
cout << endl;
wein = wein + ein*3;
}

if (ein == 5)
{
cout << endl;
cout << "Pfandrueckgabe" << endl;
cout << endl;
pfand = pfand + ein-7;
}
}

else
{
cout << "Falsche Eingabe!!!" << endl;
cout << endl;
}

}

while(ein !=0);

cout <<"Kostet " << schnaps+sekt+alkfrei+wein+pfand<< " Euro"<< endl;
cout << endl;

cout << "Neue Berechnung [j/n]:";
cout << endl;
cin >> neu;

}

while(neu !='n');
return 0;


}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.04.2008, 18:06 Uhr
öni




C++:
#include <iostream>
#include <conio>
using namespace std;

int main()
{
char neu;
char ein ;
int schnaps = 0;
int sekt = 0;
float alkfrei = 0;
int wein = 0;
int pfand = 0;


do
{

schnaps = 0;
sekt = 0;
alkfrei = 0;
wein = 0;
pfand = 0;

cout << endl;
cout << "Kirwaboum Osternohe - Mir sin andre Leit" << endl;
cout << endl;
cout << endl;

  do
  {
    cout << "Gib ein Getraenk ein ";
    ein = getch();

        switch(ein)
        {
        case '1':
         {
         cout << endl;
         cout << "Schnapsmix" << endl;
         cout << endl;
         schnaps = schnaps + 1*5 ;
         break;
         }

        case '2':
         {
         cout << endl;
         cout << "Sekt" << endl;
         cout << endl;
         sekt = sekt + 2*2;
         break;
         }

        case '3':
         {
         cout << endl;
         cout << "Alkoholfrei" << endl;
         cout << endl;
         alkfrei = alkfrei + 3+0.50;
         break;
         }

        case '4':
         {
         cout << endl;
         cout << "Flasche Wein" << endl;
         cout << endl;
         wein = wein + 4*3;
         break;
         }

        case '5':
         {
         cout << endl;
         cout << "Pfandrueckgabe" << endl;
         cout << endl;
         pfand = pfand + 5-7;
         break;
         }

         default:
         {
           cout << "Falsche Eingabe!!!" << endl;
           cout << endl;
           break;
         }
        }//switch zu

} //do zu
while(ein != '0');

cout <<"Kostet " << schnaps+sekt+alkfrei+wein+pfand<< " Euro"<< endl;
cout << endl;

cout << "Neue Berechnung [j/n]:";
cout << endl;
cin >> neu;

}
while(neu !='n');

return 0;
}


sodele habs nun. getch(); gibt dir immer ein Ascii-Code zurück, indem fall waren es 48-53. Also nimmt man char dann geht das schon weil der das richtig interpretiert. Ansonsten war schon alles richtig.

Zitat:
Double hab ich als Variable genommen weil ja Kommazahlen vorkommen

Ja, genau eine, das wäre wie wenn du, die deine ganze Wohnung weiß streichst, weil die Küche gelb ist.

Zitat:
und in der Schleife stehen sie damit bei einem neuen durchlauf wieder alle Variablen auf Null gesetzt werden

Das wäre wie wenn du, dein Haus abreist und neu baust, weil du deine Möbel umstellen möchtest. Ich weiß gar nicht ob du da nicht jedes mal neuen Speicher verbrauchst, du legst ja jedes mal neue Variabeln an.

Zitat:
Die ganzen includes stammen aus versuchen Enter zu automatisieren.

Die Includes machen dein Programm größer, das wäre wie wenn du, dir 6 Bücherregale kaufst und in 2 Regalen steht jeweils ein richtiges Buch was du brauchst.

system("cls"); ist blöd und unnötig oder steht bei dir was im Fenster? Wenn man sowas braucht dann clrscr(); Das wäre so wie wenn du deine sauberen Fenster mit Säure reinigen würdest, das kann gefährlich sein deswegen clrscr();

Hab switch genommen weil es an der Stelle angebracht ist und das erste If umgeht.

Dieser Post wurde am 02.04.2008 um 18:08 Uhr von öni editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.04.2008, 21:42 Uhr
ao

(Operator)



Zitat von öni:


Zitat:
und in der Schleife stehen sie damit bei einem neuen durchlauf wieder alle Variablen auf Null gesetzt werden

Das wäre wie wenn du, dein Haus abreist und neu baust, weil du deine Möbel umstellen möchtest. Ich weiß gar nicht ob du da nicht jedes mal neuen Speicher verbrauchst, du legst ja jedes mal neue Variabeln an.


Sorry, aber das ist Unsinn. Er braucht die Variablen bei jedem Schleifenbeginn auf Null, darum werden sie initialisiert. Muss sein, sonst funktionierts nicht. Und dass sie jedesmal deklariert werden, frisst auch kein Brot, der Compiler macht daraus ein Umsetzen des Stackpointers, sonst nix. Und vielleicht wird das sogar noch wegoptimiert.

Im Gegenteil spricht sogar einiges dafür, Variablen lokal zu deklarieren, genau da, wo man sie braucht. Dann werden sie nämlich am Schleifenende zerstört und können nicht versehentlich weiterbenutzt werden - das kann üble Bugs geben.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.04.2008, 00:14 Uhr
öni



Das mit dem Speicher, da war ich mir nicht sicher. Aber bei meiner Lösung werden sie doch auf jedes mal wieder auf Null gesetzt. Was würde das nun für ein Unterschied machen zum meiner Lösung?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: