Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Problem mit Variableneingabe in C++

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Computer-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 30.11.2007, 12:07    Titel: Problem mit Variableneingabe in C++ Antworten mit Zitat

Hallo, ich hoffe ich blamier mich hier nicht.
Also hab folgendes problem:
ich wollt nen menü programmieren in c++, das funktiert soweit auch schon ziemlich gut:

Code:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int spieler1=2,spieler2=0,eingabe;
    do {
   
    printf("Hallo!!!\n");
   
    printf("1) Spieler 1:");   
    if (spieler1==0) printf ("Computer-leicht");
    if (spieler1==1) printf ("Computer-mittel");
    if (spieler1==2) printf ("Computer-gozu");
    if (spieler1==3) printf(getenv("USERNAME"));
    printf("\n");
    printf("2) Spieler 2:");   
    if (spieler2==0) printf ("Computer-leicht");
    if (spieler2==1) printf ("Computer-mittel");
    if (spieler2==2) printf ("Computer-gozu");
    if (spieler2==3) {printf(getenv("USERNAME"));printf("s Kumpel");}
    printf("\n3) Spiel starten\n");
    cin >> eingabe;     
     if (eingabe==3) break;
    if (eingabe==1) spieler1=(spieler1+1)%4;
    if (eingabe==2) spieler2=(spieler2+1)%4;
   
    system("cls");
    } while (true);
}




wenn ich zahlen eingeb dann funzt das programm...
aber wenn ich nen Buchstaben eingeb dann hängt sich das Programm auf...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 30.11.2007, 12:46    Titel: Antworten mit Zitat

mhm, für Zeichen gabs doch den Datentyp Char, AFAIK. Ich weiß auch nicht ob C++ selbst Datentypen konvertiert, wie Basic, oder ob man sich darum selbst kümmern soll.
Meine C++-Kenntnisse beschränken sich aufs Lesen happy, sollen aber auch bald erweitert werden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 30.11.2007, 13:26    Titel: Antworten mit Zitat

danke für deine antwort. das Prolem ist glaub ich auch dass man eigentlic
keinen Buchstaben eintippen dürfte denn eingabe ist ja ne integer Zahl.
Das ist das erste was definitiv schonmal falsch ist. Man müsste die Eingabe da auf Zahlen beschränken.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 30.11.2007, 14:17    Titel: Antworten mit Zitat

Naja, du müsstest wahrscheinlich so was machen:

Code:

char temp;
cin>>temp;
eingabe = atoi(temp);

Oder so was in der Richtung; cin Speichert in der Konsole alles, was du eingegeben hast, und schreibt es in die Variable, die du angibst; wenn das aber nicht da rein passt, überspringt es einfach das cin, und wartet so lange, bis irgendwo der variablentyp, der eingeben wurde, in eine variable passt..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 30.11.2007, 15:28    Titel: Re: Problem mit Variableneingabe in C++ Antworten mit Zitat

Code:

    if (spieler1==0) printf ("Computer-leicht");
    if (spieler1==1) printf ("Computer-mittel");
    if (spieler1==2) printf ("Computer-gozu");
    if (spieler1==3) printf(getenv("USERNAME"));

urgs durchgeknallt
Code:

    switch(spieler1){
    case 0: printf("Computer-leicht"); break;
    case 1: printf("Computer-mittel"); break;
    case 2: printf("Computer-gozu"); break;
    case 3: printf(getenv("USERNAME"));
    }

zwinkern

(nein case schreibt man nicht groß, das is der code-block vom forum.. case komplett in kleinbuchstaben, genauso if)
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 30.11.2007, 16:21    Titel: Antworten mit Zitat

Code:
#include <iostream>
#include <string>
#include <sstream>

int main()
{
   std::string s;
   std::stringstream sstream;

   std::cin>>s;
   sstream<<s;
   if (!isdigit(sstream.peek()))
    std::cout<<"Keine Zahl!"<<std::endl;
    /* solltest du jetzt wieder was einlesen wollen, dann musst du den stringstream
       noch leeren. also: sstream.str(""); */

   return 0;
}

Geht den Umweg über einen String und einen Stringstream.
Peek schaut dabei nur nach dem nächsten Zeichen im Stream, legt es aber quasi wieder zurück - oder bewegt einfach den internen Zeiger nicht weiter, je nachdem, wie du's dir vorstellen möchtest.

Allerdings solltest du dich für C oder C++ entscheiden. Ein printf() gehört nicht wirklich in ein sauberes C++-Programm, und dann mixt du das auch noch mit std::cin. zwinkern
Also bleib entweder bei C (dann statt <iostream> <cstdio>) und verwende printf() und scanf() oder bei C++, dann verwende aber auch std::cout zum Ausgeben. zwinkern

Achja, gegen deinen If-Irrgarten solltest du allerdings wasw tun. O___O
Und mit den system()-Aufrufen würd ich auch sparsam sein - solltest du mal auf einem anderen System compilieren wollen. Könntest dir z.B. selbst was basteln, was dir je nachdem, für welches System compiliert wird (-> Präprozessor) eine eigene CLS-Variante bauen. Bei Windows kannst du's ja gleich so verwenden, unter Unix dann "clear" oder besser die Escape-Sequenz.
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 30.11.2007, 22:59    Titel: Antworten mit Zitat

danke für eure Antworten ich glaub das wird mir weiterhelfen
MfG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Bimi



Anmeldungsdatum: 03.12.2007
Beiträge: 66

BeitragVerfasst am: 04.12.2007, 08:41    Titel: Re: Problem mit Variableneingabe in C++ Antworten mit Zitat

MisterD hat Folgendes geschrieben:
Code:

    if (spieler1==0) printf ("Computer-leicht");
    if (spieler1==1) printf ("Computer-mittel");
    if (spieler1==2) printf ("Computer-gozu");
    if (spieler1==3) printf(getenv("USERNAME"));

urgs durchgeknallt


...du sprichst mir aus dem Mund...zwinkern

Was das Zahlen-Crashproblem betrifft...

Von der Tastatur kommen keine Zahlen, sondern stets Zeichenfolgen und also solche sollte man sie auch behandeln. Erst im Proggi selbst wird die Zeichenfolge ausgewertet und geprüft ob der Benutzer eine Zahl eingeben hat oder nicht.

Des weiteren: Entweder gestreamte IO oder nicht, aber bitte nicht mischen. Sprich entweder printf und gets oder cin und cout.

Das Systemkommando cls ist nicht anderes als ein printf("\f"). Ein Systemkommando mit system abzusetzten ist sehr teuer und sollte daher nur gemacht werden wenn es anders nicht geht oder keinen Sinn macht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 04.12.2007, 18:02    Titel: Antworten mit Zitat

Ich will dich nicht kritisieren, aber das wurde bisher schon genannt.
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 04.12.2007, 20:24    Titel: Antworten mit Zitat

oh da fällt mir noch nen Fehler ien : ich hab gosu falsch geschrieben wie peinlich....
das Problem ist im Übrigen jetzt gelöst danke für Eure Hilfe....
hab einfach anstatt ner int Variable nen char array genommen,so
Vergleichswerte sind dann halt in ascii also für 1 49 etc.

MfG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Computer-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz