Frage zu getline
-
Hallo ich krieg es einfach net geregelt das mir das Ergebniss als normale Dezimalzahl ausgeben wird
Ich hab das vor ein paar Monaten schon mal gemacht aber ich hab wieder vergessen wie es geht
Kann mir da wer helfen plz?
char key[4]; char erg; cout<<"Zahlen eingeben "; cin.getline(key,4); erg = key[0] + key[1]; cout<<erg;
-
char erg;
->
int erg;
oder du lässt es mit char (hast dann aber keinen all zu großen wertebereich) und änderst die ausgabe:
cout << int(erg);
bb
-
Ehm wie meinst du das jetzt etwas so ?
Aber da wird mir auch nicht das richtige ergbeniss ausgeben
#include <iostream> #include <sstream> using namespace std; int main(int argc, char* argv[]) { char key[4]; char erg; cout<<"Zahlen eingeben "; cin.getline(key,4); erg = key[0] + key[1]; cout<<(int ) erg; system("PAUSE"); } //---------------------------------------------------------------------------
-
@ blup:
unskilled schrieb:
char erg;
->
int erg;
Das deutet darauf hin, dass du
char erg;
im Code durchint erg;
ersetzen solltest.Du kannst dann die Zahl direkt einlesen (hier ohne Prüfung auf Korrektheit):
int Zahl; std::cin >> Zahl;
Falls du trotzdem mal eine ganze Linie als Zeichenkette einlesen willst, würde ich statt des
char
-Arrays einenstd::string
nehmen, sonst hast du sehr schnell einen Pufferüberlauf, wenn du einmal mehr als 4 Zeichen eingibst. Allerdings musst du dann zur globalen Funktionstd::getline()
wechseln undstd::getline(std::cin, dein_string);
schreiben.
-
Dann hab ich ja das selbe Problem wie jetzt -.-
-
Was für ein Problem? Drück dich verständlich aus.
Hast du meine Anweisungen überhaupt befolgt?
-
Ich hab eine Lösung gefunden aber gut is die glaub ich nicht oder ?
#include <iostream> #include <sstream> using namespace std; int main(int argc, char* argv[]) { string key; int z1; int z2; int erg; cout<<"Zahlen eingeben "; getline(cin, key); stringstream str_1; str_1 << key[0]; str_1 >> z1; stringstream str_2; str_2 << key[1]; str_2 >> z2; erg = z1 + z2; cout<<erg; system("PAUSE"); }
Wieso krieg ich sowas einfach gerade nicht hin AHH ICH HASSE ES !
-
Wie wärs mit Folgendem?
int z1; int z2; std::cin >> z1 >> z2; std::cout << z1 + z2 << std::endl;
Mit
std::stringstream
bist du aber grundsätzlich flexibler.
-
Da du eh schon
#include <sstream>
hast, kann ich ja jetzt auch die Streams benutzen^^
Btw: sag mal, was du eigtl machen möchtest - vll gibts da nen besseren Weg...#include <iostream> #include <sstream> #include <string> int StrToInt(const std::string &in) { int R; std::stringstream ss; ss << in; ss >> R; return R; } void halte_console_offen() { std::cin.clear(); std::cin.ignore( std::cin.rdbuf()->in_avail() ); std::cin.get(); } int main() { std::string key; cout << "Zahlen eingeben "; std::getline(std::cin, key); int ergebnis = StrToInt(key); cout << ergebnis; halte_console_offen(); }
bb
-
Sowas will ich machen^^
#include <iostream> #include <sstream> using namespace std; int main(int argc, char* argv[]) { string key; int z1; int z2; int erg; cout<<"Zahlen eingeben "; getline(cin, key); stringstream str_1; str_1 << key[0]; str_1 >> z1; stringstream str_2; str_2 << key[1]; str_2 >> z2; erg = z1 + z2; if (erg==4) { cout<<"ok"; } else { cout<<"err"; } system("PAUSE"); }
-
Du kannst den selben Stringstream noch mal benutzen, da ersparst du dir ein paar Byte.
Deine Methode jetzt ist der offizielle Weg. Etwas "tricky" ist:
int erg; char c_string[4]; cin.getline(c_string, 4); erg = (c_string[0] + c_string[1]) - '0'; cout << erg << endl;
Gilt natürlich nur für einstellige Zahlen.
-
Sowas will ich machen^^
du sollst es in worten beschreiben...
dein so beschriebenes problem lässt sich ca. 999999999999x hübscher lösen...bb
PS:
erg = (c_string[0] + c_string[1]) - '0';
'0' + '0' - '0' = '0'. sollte aber 0 sein...
außerdem kanns bei char+char sehr leicht zu nem überlauf kommen - bei ner vorzeichenbehafteten zahl(wie es char sein _könnte_ (idR auch ist)) ist der imho nicht standardisiert.
außerdem glaub ich auch nicht, dass der C++ standard garantiert, dass '0' ... '9' direkt aufeinanderfolgen - aber das ist wohl eher krümelkackerei ;o)
-
unskilled schrieb:
außerdem glaub ich auch nicht, dass der C++ standard garantiert, dass '0' ... '9' direkt aufeinanderfolgen
hier falsch.