hab mir gez ne tolle eingabefunktion gebastelt.... nur ein problehm...
-
also die eingabe funktion mit fehlerprüfung funktioniert...
hab nur eine frage...
wenn der string hallo durch meine funktion einen wert zugewiesen bekommen soll... mache ich das bis jezt so...
hallo=strzahl_in();
will das aber gerne so machen:
strzahl_in(hallo);
habs mit call by reference versucht aber ging nicht so wie ich das wollte...
irgend jemand ne idee ???MFG BALTUR
-
Baltur schrieb:
habs mit call by reference versucht aber ging nicht so wie ich das wollte...
Wie wolltest du es denn? Was ging nicht? Was hast du gemacht (Code)?
-
sting str_in(string &ausgabe) { //code //code return ausgabe; }
hehe und das ging nicht *g* k.p wie man das anders machen kann....
-
//code //code
Das tut ja auch nichts
Baltur schrieb:
das ging nicht
s.o.
-
bist du sicher das du den restlichen code überhaupt brauchst ? der iss nur ne schleife die bei fehleingabe von forne anfängt und bei richtiger eingabe dein eingabewert übernimmt... dürfte also eigendlich nix zur sache tun....
wennu den wirklich brauchst um mir helfen zu können schick ich dir den später (netzwerkkarte-laptop kaputt...[müsste den scheiss also abschreiben *g*])Danke trozdem scho mal MFG Baltur.....
-
Was willst du machen?
Es kann dir wohl niemand helfen, wenn du nicht sagst, was nicht geht? Gibt es falsche Ausgaben, nicht die gewünschte? Mach ein Minimalbeispiel das den Fehler zeigt und poste es, halt ohne die Schleifengeschichten.
Vom Funktionsnamen liesse sich deuten, dass du nur ne Zahl einlesen willst:
Da hab ich hier im Forum folgendes gefunden:using namespace std; template< typename return_t> return_t read_from_cin( string const & prompt ) { string input; stringstream sstr; return_t ret; do { sstr.clear(); cout << prompt << flush; getline( cin, input ); sstr.str( input ); sstr >> ret; } while( !sstr ); return ret; } //... int n = read_from_cin<int>( "Bitte Zahl eingeben: " );
-
also iss scho mal ne sehr gute antwort... ich schick dir mal echt meine scheiss funktion m. allen anderen die ich brauchte.... vlt vestehst mir ja dann *g* aber kann n bissl dauern....
-
#include <iostream> #include <windows.h> #include <string.h> using namespace std; class Cursor { public: int mode(int mode) { CONSOLE_CURSOR_INFO cursor_info; switch(mode) { case 2:cursor_info.bVisible = FALSE;cursor_info.dwSize = 00;break; case 1:cursor_info.bVisible = TRUE;cursor_info.dwSize = 10;break; case 25:cursor_info.bVisible = TRUE;cursor_info.dwSize = 25;break; case 50:cursor_info.bVisible = TRUE;cursor_info.dwSize = 50;break; case 75:cursor_info.bVisible = TRUE;cursor_info.dwSize = 75;break; case 100:cursor_info.bVisible = TRUE;cursor_info.dwSize = 100;break; } SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); } int get_max_y( ) { HANDLE output = GetStdHandle( STD_OUTPUT_HANDLE ); CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo( output, &csbi ); return csbi.srWindow.Bottom - csbi.srWindow.Top + 1; } int get_max_x( ) { HANDLE output = GetStdHandle( STD_OUTPUT_HANDLE ); CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo( output, &csbi ); return csbi.srWindow.Right - csbi.srWindow.Left + 1; } int where_x( ) { void *output = GetStdHandle( STD_OUTPUT_HANDLE ); CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo( output, &csbi ); return csbi.dwCursorPosition.X; } // An welcher Y Position befindet sich der Cursor int where_y( ) { void *output = GetStdHandle( STD_OUTPUT_HANDLE ); CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo( output, &csbi ); return csbi.dwCursorPosition.Y; } // Gehe mit dem Cursor an pos, X , Y void gotoxy( int x, int y ) { void *output = GetStdHandle( STD_OUTPUT_HANDLE ); COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition( output, pos ); } }; bool formatpruefung(string eingabe) { int pruefe=0; int plusste=0;bool plus=false; int punktste=0;bool punkt=false; int minusste=0;bool minus=false; while(eingabe.compare(0,1," ",0,1)==0)eingabe.erase(0,1); while(eingabe.compare(eingabe.size()-1,1," ",0,1)==0)eingabe.erase(eingabe.size()-1,1); pruefe=eingabe.find(" "); if(pruefe>-1)return false; for(int i=0;i!=eingabe.size();i++) { if(eingabe[i]-48==-2){punkt=true;punktste==i;} if(eingabe[i]-48==-3){minus=true;minusste==i;} if(eingabe[i]-48==-5){plus=true;plusste==i;} if(eingabe[i]-48==-1)return false; if(eingabe[i]-48==-4)return false; if(eingabe[i]-48<-5)return false; if(eingabe[i]-48>9)return false; // ?? dürfte eigendlich nicht notwendig sein...if(eingabe[i]-48<=9 && eingabe[i]-48>-5)fehler=false; } for(int i=punktste+1;i!=eingabe.size();i++) { if(eingabe[i]-48==-2)return false; if(eingabe[i]-48==-3)return false; if(eingabe[i]-48==-5)return false; } if(eingabe[0]-48==-2)return false; if(eingabe.size()<0)return false; return true; } string strzahl_in() { Cursor cursor; string eingabe=""; string ein_tmp=""; int xpos1=cursor.where_x(); int ypos1=cursor.where_y(); do { getline(cin,eingabe); while(eingabe.compare(0,1," ",0,1)==0)eingabe.erase(0,1); while(eingabe.compare(eingabe.size()-1,1," ",0,1)==0)eingabe.erase(eingabe.size()-1,1); if(formatpruefung(eingabe)==true)return eingabe; cursor.gotoxy(xpos1,ypos1); printf("Eingabe fehlerhaft "); cursor.gotoxy(xpos1,ypos1); _sleep(2000); printf(" "); cursor.gotoxy(xpos1,ypos1); cout<<eingabe<<endl; cursor.gotoxy(xpos1,ypos1); if(ein_tmp.size()==eingabe.size())eingabe=eingabe; if(ein_tmp.size()<eingabe.size())eingabe=eingabe; if(ein_tmp.size()>eingabe.size()) { for(int i=0;i!=eingabe.size();i++) { ein_tmp.erase(0,1); } eingabe = eingabe + ein_tmp; } ein_tmp=eingabe; } while(formatpruefung(eingabe)==false); while(eingabe.compare(0,1," ",0,1)==0)eingabe.erase(0,1); while(eingabe.compare(eingabe.size()-1,1," ",0,1)==0)eingabe.erase(eingabe.size()-1,1); return eingabe; } Cursor cursor; int main() { while(1){ string eingabe; eingabe=strzahl_in(); cout<<eingabe<<endl; } system("pause"); }
jezt binn ich ma auf die antwort gespannt *g*
MFG Baltur............
-
ach ja..... für getline bastel ich mir auch was besseres zusammen.... ( was heist besser...?) besser editierbar..... m. fgets u. getch....
-
immer noch auf antwort wart.......*G*
mfg baltur.... und ach ja was ging und was nicht ging ist im ersten post genau beschrieben !!!!
-
Sry, aber ich blick grad nicht durch. Hab die compare() Funktion noch nie verwendet. Vielleicht jemand anders..
-
eingabe.compare(0,1," ",0,1)
vergleicht den string eingabe von [i]0 bis [i]1 (string von mir ersezt durch " " [währe ja das selbe wenn man string wasweisich=" " gemacht hätte...] mit der position vom string wasweisich von [i]0 bis [i]1...... also sucht nach leerzeichen am anfang bzw am ende je nach while schleife.....
MFG Baltur bitte hilf mir doch mal bei meiner frage *g*
quatsch... scheisse gelabert...
eingabe.compare(position vom string eingabe,anzahl zu vergleichender zeichen, zu vergleichenden string,position vom zu vergleichenden string, anzahl zu vergleichender zeichen) so irgendwie *g* vergleicht auf jeden fall 2 strings... erklährungsnot *G*
-
4 4 5 5 6 6 w Eingabe fehlerhaft w gz Eingabe fehlerhaft gz
Anstelle von return eingabe musst du dann halt der Referenz zuweisenvoid strzahl_in( string& ret) { string eingabe=""; //... if( blablubb ) { ret = eingabe; return; } //... while( blablubb ); ret = eingabe; return; } int main() { while(1){ string eingabe; strzahl_in(eingabe); cout<<eingabe<<endl; } }
Aber du mischt da C und C++ durcheinander. Finde die Lösung mit return Wert besser (nur meine Meinung
)
Ausserdem, wenn die Eingabe leer ist (nur Entertaste) dann kommt:terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::compareDie Exception solltest du auffangen oder erst auf leere Strings prüfen.
So ich hoff das hilft dich weiter
mfg:xmas1:
-
super herzlichen dank !!!!!
damit beantwortest du preziese meine frage und machst mich auf fehler aufmerksahm die mir net aufgefallen sind (gleich erst mal gucken *g*)
DANKE !!!
MFG Baltur
-
Hallo,
void refer(std::string &given){ given = "string.content"; }
Ist schon richtig.
MFG winexec*