Frage zu getline
-
@ 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.