Zum Inhalt springen

c++ casting problem


bigair
 Teilen

Empfohlene Beiträge

servus leute,

 

ich will einfach nur einen string in ein int parsen, was ja eigentlich kein so großes problem darstellen sollte. (Integer.parseInt(var) bei java)...jetzt hab ich eine methode für c++ gesucht, aber da gibts ca 5 verschiedene die bei meinem compiler nicht funktionieren....angefangen von .NET eigenschaften bis zu anderem zeugs.

 

string tmp;
cin.ignore(cin.rdbuf()->in_avail());
getline(cin, tmp);
this->inputerg=static_cast(tmp);

 

sollte ja eigentlich funktionieren, nur irgentwie dann doch ned :confused:

 

lg

d

Link zu diesem Kommentar
Auf anderen Seiten teilen

muss bis heute mitternacht ein mathematik quiz für volksschüler machen...also da kommt dann die frage....20+30...und die gebn dann 50 ein...dann kommens ins nächste level...usw... :D

 

//edit...also c++ is mir schon sehr suspect

 

this->a=(int)rand()%(9* (*level+1))+1;

 

this->a=(int)rand()%(*basis * *level))+1;

 

:rofl:

Link zu diesem Kommentar
Auf anderen Seiten teilen

noch was oarges:

 

ich hab:

 

function blabla(){
cout...
int tmp;
cin >> tmp;
switch(tmp){
 case 1: .... break;
 case 2: .... break;
 default: cout.... break;
}
blabla();
}

 

das heißt, er macht imma eine ausgabe...dann soll der user eine zahl eingeben, und je nach dem wird dann im switch weitergeleitet...eine eingaben wie zb "muh" will ich mit dem default abfangen, also wenn er irgentwas anderes eingibt als 1/2 dann kommt er ins default, und kommt eine ausgabe...dannach wird die funktion wieda aufgerufen...

 

...das problem is nur, das wenn der user irgentwas eingibt....komm ich niewida zur eingabe...sondern geht er den switch die ganze zeit im default stadium durch...

 

ausgabe vorm switch

ausgabe im default

 

ausgabe vorm switch

ausgabe im default

 

also ein oarger deadlock...warum is das so?

 

//edit: eigentlich müsst er ja schon rausfliegen wenn ich ein char in ein int speichern will... :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

... wieso? ein char hat 8 bit, ein int mindestens 16. das wird einfach automatisch gecastet. andere frage - wieso machst dasn in c++?

lg

birki

 

weil ichs machen muss ( :f: )

 

hast recht, von char auf int gehts...von string auf int eben nicht.

und eingaben mit char sind ja auch ned grad optimal...weil was wenn er "sdsd" ein gibt. da gehts dann maximal mit einem char array, und das wird dann wida voll mühsam :rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

aber eine alternative hätt ich eh schon

 

char k[10];
cin >> k; 
cout 

 

da ich eh nur eingaben von 1-5 brauch, würds gehen. weil wenn jetzt jemand 5 eingibt, is es 5...wenn jemand 5bla eingibt....is es 5. und wenn jemand 'sdsd' eingibt, is es auf jedenfall nix von 1-5...aber das muss ja auch irgentwie ohne so extremen pfusch gehn :f:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Versuch es mal nicht so:

case 1: .... break;

Sondern so:

case '1': .... break;

 

Ich schreib mal schnell nen kleinen Code und post diesen dann.

 

Edit:

Hier der Code wie ich das machen würde:

#include 
using namespace std;

bool blabla(char *string){
bool test=false;
switch(string[0]){
 case '1':
  return true;
 break;

 case '2': 
  return true;
 break;

 default: 
  return false;
 break;
}
}  

int main()
{
char eingabe[100];
cout  do
{
 cin >> eingabe; 
}
while(blabla(eingabe)==false);
system("PAUSE"); // Nur für den Test in meinem Compiler
}

 

Folgendes solltest du auch nicht machen:

function blabla(){
cout...  //erst eine Ausgabe
int tmp; //dann Variable initialisieren

Bei C hätte dir der Compiler ne Fehlermeldung oder ein Warning ausgegeben. Auch in C++ sollten die Variablen am Anfang einer Funktion initialisiert werden.

 

@Birki

Mir ist C++ viel lieber ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

also ich würd einfach mit einer if-funktion zuerst die eingabe prüfen und erst dann die switch-funktion abrufen

 

if((tmp != 1) || (tmp != 2))

{

}

Das wird auch nicht gehen.

Er will ein char bzw. in seinem Fall einen String überprüfen. Ich hab zwar String noch nie verwendet aber ich nehm an da ist es genauso.

Wenn aber 1 ohne '' überprüft wird nimmt der Compiler an, dass es sich um eine int Variable handelt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

...von string auf int eben nicht.:

bubebube ... ein string ist ein array von 8bit - zahlen, ein int mindestens eine 16 bit zahl. wennst es konservativ machen willst, kannst das gute alte atoi aus der c-lib nehmen, oder Du verwendest gleich eine c++ bibliothek, die die die strings gscheit verwaltet, wie qt (die kann dann auch unicode). in der qstring->toInt(...) kannst dann auch die methode aufrufen, die Dir eine zahl macht ...

lg

birki

PS: ... C++ rult schon, nur für die anwendung vom dominik erscheints mir als overkill ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

bubebube ... ein string ist ein array von 8bit - zahlen, ein int mindestens eine 16 bit zahl. wennst es konservativ machen willst, kannst das gute alte atoi aus der c-lib nehmen, oder Du verwendest gleich eine c++ bibliothek, die die die strings gscheit verwaltet, wie qt (die kann dann auch unicode). in der qstring->toInt(...) kannst dann auch die methode aufrufen, die Dir eine zahl macht ...

lg

birki

 

:D

 

ahja...kennst du ein vernünftiges online handbuch zu c++?

Link zu diesem Kommentar
Auf anderen Seiten teilen

bubebube ... ein string ist ein array von 8bit

Du meinst Char oder? :confused:

 

ansich is c++ eh ned so bled....aber nachdem ich jahrelang java programmiert hab....und in letzter zeit nurnoch ac und php...is der umstieg zu so einer programmiersprache wida zach

Siehst ich hab mit C++ begonnen und deswegen kann ich mit Java und C# nix anfangen.

Und PHP verwend ich auch fast täglich, es lebe das Webdesign bzw. Firmen die Websiten brauchen :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

nö. deadlock bedeutet, dass 2 prozesse aufeinander warten, und das in alle ewigkeit. tritt vorallem auf bei fehlerhafter ressourcenverwaltung :)

 

jo...schon...aber das is eindeutig auch ein deadlock.

für mich beschreibt ein deadlock einen status eines programms, der nicht verlassen werden kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

jo...schon...aber das is eindeutig auch ein deadlock.

für mich beschreibt ein deadlock einen status eines programms, der nicht verlassen werden kann.

najo ... das wäre do {} while (1 !=2) auch... in so einem fall hat man dann einfach einen schas zsammprogrammiert ...

lg

birki

Link zu diesem Kommentar
Auf anderen Seiten teilen

najo ... das wäre do {} while (1 !=2) auch... in so einem fall hat man dann einfach einen schas zsammprogrammiert ...

lg

birki

 

ja eh....auch while(true){...}...

 

aber da is es fürs programm genau aus...wurscht ob jetzt zwei threads auf gegenseitig blockierte speicherplätze warten, oder eine unendliche schleife. im endeffekt steht das programm.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

 Teilen

×
×
  • Neu erstellen...