Passwortabfrage
-
Selbst getline() scheint keine Leerzeichen zu unterstützen. Ich habe iostream, conio und string inkludiert.
MfG, C++Progger
-
Tut es eigentlich schon. Zeig bitte, wie du es machst.
-
.filmor schrieb:
Tut es eigentlich schon. Zeig bitte, wie du es machst.
Bestimmt macht er's mit einer alten Visual Studio 6.0 Version

-
Oder es liegt an der Mondphase ...
-
.filmor schrieb:
Oder es liegt an der Mondphase ...
Sehr witzig
.#include <iostream> using namespace std; #include <conio.h> using namespace std; #include <string> using namespace std; int main () { string s1; cout << "Enter a sentence (use <space> as the delimiter): "; getline(cin,s1, ' '); cout << "You entered: " << s1 << endl;; getch(); }Compiler : Bloodshed Dev-C++ 4.9.9.2
MfG, C++Pogger
-
C++Progger schrieb:
.filmor schrieb:
Oder es liegt an der Mondphase ...
Sehr witzig
.War nicht gegen dich gerichtet

Wie du in deinem Code siehst, ist ' ' (das Leerzeichen) der Delimiter, also Trenner. Lässt du diesen Parameter einfach weg, wird '\n' benutzt (und damit alle Leerzeichen mit eingelesen).
#include <iostream> #include <string> using namespace std; // einmal reicht und nicht vor den Headern int main () { string s; getline (cin, s); // entspricht: getline (cin, s, '\n') }
-
@.filmor Wie einfach. Vielen Dank

Ich danke natürlich auch allen anderen die hier geschrieben haben, dass sie mich nicht gleich an die MSDN Lib weitergeschickt haben

MfG, C++Progger
-
#include <iostream> using namespace std; #include <conio.h> using namespace std; #include <string> using namespace std; FILE* datei; FILE* dateioffnen; FILE* pfile; bool passed = false; void program(); int main () { dateioffnen = fopen("Passed.txt","w+"); datei = fopen("Passed.txt","w"); string code;; string firstcode = "earth"; string secondcode = "air"; string thirdcode = "fire"; string fourthcode = "water"; string admin = "enter"; cout << "Enter first code : "; getline(cin,code); if (code == firstcode) { fprintf(dateioffnen,"The first code was true.\n"); cout<<"Enter second code : "; getline(cin,code); if (code == secondcode) { fprintf(datei,"The second code was true.\n"); cout<<"Enter third code : "; getline(cin,code); if (code == thirdcode) { fprintf(datei,"The third code was true.\n"); cout<<"Enter fourth code : "; getline(cin,code); if (code == fourthcode) { fprintf(datei,"The fourth code was true, too.\nThe User passed"); cout<<"You passed"; fclose(datei); passed = true; program(); } } } } else if (code == admin) { cout<<"You passed"; fprintf(datei,"The User logged in as administrator"); fclose(datei); passed = true; program(); } cin.ignore(); } void program() { string entry; char cmd; bool fileexists; while(1) { getline (cin,entry); } if (entry == "save file") { cout<<"Enter file name with extension : \n"; getline (cin,cmd); if (fileexists == 0) { pfile = fopen (cmd,"w+"); fclose(pfile); fileexists = 1; } if (fileexists == 1) { pfile = fopen (cmd,"w"); fprintf (cmd,"Saved\n"); fclose (pfile); } } }Passwortabfrage.cpp: In function `void program()': Passwortabfrage.cpp:80: error: no matching function for call to `getline( std::istream&, char&)' Passwortabfrage.cpp:83: error: invalid conversion from `char' to `const char*' Passwortabfrage.cpp:89: error: invalid conversion from `char' to `const char*' Passwortabfrage.cpp:90: error: invalid conversion from `char' to `FILE*'MfG, C++Progger
-
#include <iostream> #include <string> // #include <conio.h> ist weder C noch C++ Standard // und du verwendest keine einzige // Funktion daraus. using namespace std; // einmal reicht! /* FILE* datei; FILE* dateioffnen; FILE* pfile; bool passed = false; Globale variablen sind ekelhaft! */ void program( ); int main () { /* dateioffnen = fopen("Passed.txt","w+"); datei = fopen("Passed.txt","w"); wieso zwei verschiedene Handles auf die Selbe datei?? */ FILE *datei = fopen( "Passed.txt", "w+" ); string code; string firstcode = "earth"; string secondcode = "air"; string thirdcode = "fire"; string fourthcode = "water"; string admin = "enter"; cout << "Enter first code: "; getline( cin, code ); if( code == firstcode ) { // fprintf( dateioffnen, "The first code was true.\n" ); fprintf( datei, "The first code was true.\n" ); cout << "Enter second code: "; getline( cin, code ); if( code == secondcode ) { fprintf( datei, "The second code was true.\n" ); cout << "Enter third code: "; getline( cin, code ); if( code == thirdcode ) { fprintf( datei, "The third code was true.\n" ); cout << "Enter fourth code: "; getline( cin, code ); if (code == fourthcode) { fprintf( datei, "The fourth code was true, too.\nThe User passed" ); cout << "You passed"; fclose( datei ); // passed = true; wofür? program(); } } } } else if( code == admin ) { cout << "You passed"; fprintf( datei, "The User logged in as administrator" ); fclose( datei ); // passed = true; wofür? program(); } // cin.ignore(); wofür!? } void program( ) { string entry; char cmd; bool fileexists; /* while( 1 ) { getline( cin, entry ); } mhm... Endlosschleifen sind immer toll... */ if( entry == "save file" ) { // Cool, und was wäre (vorausgesetzt wir würden überhaupt // bis hierher kommen (siehe Endlosschleife) ) wenn ich eine // datei erstellen möchte, welche den Text "save file" _enthält_? cout << "Enter file name with extension:" << endl; // getline( cin, cmd ); ist ja nett, aber in cmd (char) passt genau 1 (in Worten: ein) Zeichen. FILE *pfile; if( fileexists == 0 ) { // welchen garantierten wert hat denn fileexists?? Genau: einen // nicht definierten -> netter Zufallsgenerator, wobei die Chancen dafür, // dass sich der Vergleich bewarheitet minimalistisch ist. pfile = fopen( const_cast< const char* >( reinterpret_cast< char* >( &cmd ) ), "w+" ); // hm, hier öffnetst du nun deine Datei mit dem Dateinamen von // maximal 1 (in worten: einem) Zeichen... // Das gecaste ist hier natürlich quatsch von mir ;) fclose(pfile); // ...und schließt sie gleich wieder. // fileexists = 1; einem bool sollte man keinen Integer zuweisen: fileexists = true; } if( fileexists == 1 ) { pfile = fopen( const_cast< const char* >( &cmd ), "w" ); // Das gecaste ist hier natürlich quatsch von mir ;) // fprintf( cmd, "Saved\n" ); nee, fprintf will als ersten Parameter einen Zeiger auf eine FILE // Struktur, keinen 1-Zeiche-Dateinamen fprintf( pfile, "Saved\n" ); // aber warum schreibst du lediglich "Saved" in die Datei und nicht // den vom Benutzer getippselten Text!? fclose( pfile ); } } }Du willst dir doch sicher ein gutes Buch über wahlweise C oder C++ zulegen!?
Greetz, Swordfish
-
ich find das immer so schön. man antwortet und die fragensteller lesen das nicht durch. warum fragen die dann?
wie oft muss man denn sagen das man getline verwenden soll? wie oft muss man sagen das EINMAL using namespace std reicht.
ich versteh das nicht.
und dann werden viele noch pampig.
-
Falls es den OP noch interessiert...
Im übrigen ist den Code eine grausames mischmasch aus C und C++. Wenn man schon in C++ Programmiert, dann bitte auch durchgängig:
#include <vector> #include <string> #include <fstream> #include <iostream> using namespace std; string get_logon_type_info( bool admin_mode ); int main () { const string codes[ ] = { "enter", "earth", "air", "fire", "water" }; const string ordinal[ ] = { "first", "second", "third", "fourth", }; const size_t admin_code_index = 0; const size_t first_user_code = 1; const size_t num_codes = sizeof( codes ) / sizeof( string ); bool admin_mode = false; size_t current_code = first_user_code; string code; do { cout << "Please enter the " << ordinal[ current_code - 1 ] << " code: "; getline( cin, code ); if( code == codes[ admin_code_index ] ) { admin_mode = true; } } while( ( code == codes[ current_code ] ) && ( ++current_code < num_codes ) ); if( !admin_mode && ( current_code != num_codes ) ) { cout << "You failed at the " << ordinal[ current_code - 1 ] << " code!" << endl; cout << "aborting..." << endl; return EXIT_FAILURE; } cout << endl << "You are " << get_logon_type_info( admin_mode ) << "." << endl << endl; cout << "Please enter some text (to end the input mode, type the number" << endl; cout << "Zero at a single line):" << endl; vector< string > input; string current_input; getline( cin, current_input ); while( current_input != "0" ) { input.push_back( current_input ); getline( cin, current_input ); } if( !input.size( ) ) { cout << "There is no text to save!" << endl; return EXIT_FAILURE; } string file_name = ""; fstream file; const string different = "different "; bool different_filename = false; bool overwrite = false; while( file_name.empty( ) || different_filename ) { cout << endl << "Please enter a "; if( different_filename ) { cout << different; } cout << "filename to save your text to (simply press enter to abort):" << endl; getline( cin, file_name ); different_filename = false; if( file_name.empty( ) ) { cout << "aborting..." << endl; return EXIT_FAILURE; } file.open( file_name.c_str( ), ios_base::in ); if( file.is_open( ) ) { file.close( ); cout << endl << "The File \"" << file_name << "\" does already exist!" << endl; cout << "Do you want to overwrite it? (y/n)" << endl; char ch = 1; do { if( !ch ) { cout << "Wrong input!" << endl << endl; } cin >> ch; if( cin.fail( ) ) { cin.clear( ); cin.ignore( cin.rdbuf( )->in_avail( ) ); ch = 0; } else if( ( toupper( ch ) != 'Y' ) && ( toupper( ch ) != 'N' ) ) { ch = 0; } } while( !ch ); cin.clear( ); cin.ignore( cin.rdbuf( )->in_avail( ) ); if( toupper( ch ) == 'N' ) { different_filename = true; } else { different_filename = false; overwrite = true; } } if( !different_filename ) { ios_base::open_mode open_mode = ios_base::out; open_mode = ( overwrite ) ? ( open_mode | ios_base::trunc ) : ( open_mode ); file.open( file_name.c_str( ), open_mode ); if( !file.is_open( ) ) { cout << "The file " << file_name << " could not be created!" << endl; different_filename = true; } } } cout << endl << "\"" << file_name << "\" has been opened for writing." << endl; for( vector< string >::iterator i = input.begin( ); i != input.end( ); ++i ) { file.write( ( *i ).c_str( ), ( *i ).length( ) ); file.put( '\n' ); } cout << "The text has been written to \"" << file_name << "\"." << endl; file.close( ); } string get_logon_type_info( bool admin_mode ) { string logon_type_info = "logged in as a"; logon_type_info += ( admin_mode ) ? "n administrator" : " user"; return logon_type_info; }Greetz, Swordfish
-
Hallo,
Man kann auch alles in Klassen kapseln. Das ist dann auch C++ :).
MFG winexec*
-
@Swordfish : Ich habe die ios_base::open_mode in ios_base::openmode umgeändert, sonst gehts nicht ;).
MfG, C++Progger