Eine Frage
-
Du lässt das 'cin >> Eingabe;' jetzt aber weg, oder?
-
#include <iostream> #include <string> using namespace std; void main() { const int maxBegruessung = 3; char Begruessung[maxBegruessung][20] = { "Hallo" , "Guten Tag", "Hi"}; string Eingabe; int i; int t1; i = 0; t1=0; cout << endl << "Test Programm" << endl << endl; getline (cin, Eingabe); do { if(Eingabe == Begruessung[i]) { t1=1; break; } else t1=0; i++; } while(i<maxBegruessung); if (t1==1) cout << "Stimmt überein"; else cout << "Stimmt NICHT überein"; }
Das ist der Abschnitt, lässt sich kompilieren.
Könnt ihr mir sagen, ob bei euch auch 2 (!) Zeilen eingelesen werden?
-
MSVC++ 6.0 getline Method Patch
Acknowledgements:
This patch was originally brought to my attention by Dr. Mark Sebern.Instructions:
Users of the string getline method in MSVC++ 6.0 are aware that it has some errors. The most obvious problem is that you may often have to use the <Enter> key more than once for the following code. This is not correct.
string mystring;
getline(cin,mystring,'\n');To correct this problem the header file which defines the string class needs to be updated. This can simply be done by replacing line 165
which reads: _I.rdbuf()->snextc();
with the following: _I.rdbuf()->sbumpc(); // Dinkumware patch MSOEThe header file can be found at "..\Program Files\Microsoft Visual Studio\VC98\Include" (or equivalent).
-
BTW, void main ist nicht Standard. main muss int zurückgeben. (Ja, ich weiß, das der MSVC 6 das trotzdem zulässt.)
-
Jup, hätt nicht gedacht das der Compiler soar Bugs hatt
Danke!
-
Ich habe mir eben das neuste Service Pack 6 installiert, weil ich die die Stelle in der Datei (auch mit Suche nicht finden konnte).
Ich habe die String Header (String.h) Datei durchsucht, da war sie aber nicht.
Welche Datei ist gemeint?
mFG
DaMiNaToR
-
Hallo,
die Datei heisst nicht string.h sondern nur string
mfg
v R
-
Es tut mir leid, ich weis, das ich euch quäle
, naja aber mein Kenntnisse sind noch bescheidend, aber eines Tages werde ich hier anderen vielleicht auch helfen können
.
Habe eine Zeit lang überlegt
, aber der Compiler hatt immer etwas mit dieser "Konventierung".
Ich will die Buchstaben-Kleinermachen als Funktion schreiben, ich habe es jetzt so:
#include <iostream> #include <string> using namespace std; void main() { const int maxBegruessung = 3; char Begruessung[maxBegruessung][20] = { "Hallo" , "Guten Tag", "Hi"}; string Eingabe; int i; int t1; i = 0; t1=0; cout << endl << "Test Programm" << endl << endl; getline (cin, Eingabe); do { if(Eingabe == Begruessung[i]) { t1=1; break; } else t1=0; i++; } while(i<maxBegruessung); if (t1==1) { cout << "Stimmt überein"; } else { cout << "Stimmt NICHT überein"; } } string LowChars(string Eingabe) { for (int i=0; i< signed (strlen (Eingabe)) ; i=i+1) { //Eingabe[i]=toupper(Eingabe[i]); = ALLES GROSS Eingabe[i]=tolower(Eingabe[i]); } return Eingabe; }
Aber ich darf irgendwie nicht string verwenden, char will er auch nicht akzeptieren
HILFE
mFG
DaMiNaToR
-
ein paar tips
-schreibe int main, nicht void.
-mach ein lieber array aus strings
string begruessung[] = { "Foo", "Bar", "etc" }; //größe: sizeof(begruessung)/sizeof(*begruessung)
-verwende statt endl
const char nl = '\n'; cout << foo << nl; //statt deiens cout << endl << "Testprogramm" << endl << endl; //schreib also lieber cout << "\nTestprogramm\n\n";
wenn du nicht weißt, was endl bewirkt.
-definiere deine variablen nicht schon am anfang einer funktion, sondern exakt dann, wenn du sie brauchst.
-inkludiere cctype für tolower, sicher ist sicher.
oder inkludiere locale und verwendefoo[i] = tolower(foo[i], locale());
-strlen ist eine funktion, die nur auf zeiger auf const char arbeitet.
die entsprechende funktion für std::strings ist size bzw. length, und das sind memberfunktionenfor (unsigned i = 0; i < your_string.length(); ++i)
das jetzt einmal allgemein.
was jetzt noch auffällt ist, dass du eine funktion definierst, die du überhaupt gar nicht verwendest (nämlich LowChars).
-
Danke für die Tipps, habe sie jetzt alle beachtet!