Mehrere Stringbeispiele von c++ reference funktionieren nicht...
-
Nathan schrieb:
Include <limits> und füge cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' ); nach Zeile 25 ein...
Und es sollte #include <cstdio> heißen nicht stdio.h.Menüpunkt 2, 3 und 6 funktionieren jetzt, aber 4 nicht und nun ist Menüpunkt 5 eine Endlosschleife...
Ich schau es mir morgen noch einmal genauer an...
-
Lediglich zwei Dinge:
if (!is) { // Fehlermeldung ausgeben weil, File nicht vorhanden }Einfügen in Zeile 80 oder das so machen wie bei Menüpunkt 3.
Und ein break in Zeile 95 einfügen, weil sonst die Schleife direkt zu fünf wechselt.
Punkt 6 funktioniert bei mir.
-
statt
char name[256]; cin.getline(name, 256);lieber
std::string name; getline(cin, name);das spart dir auch einiges
-
Also ich habe mir mal die Arbeit gemacht und habe das komplette Programm in kleine Einzelprogramme geschrieben. Ich hoffe, dass ich die einzelnen Funktionen richtig verstanden habe.
--------------------------------------------------------------------------------
1.) Funktion put(char)Die Funktion gehört zur Standardausgabe. Sie schreibt einen Buchstaben zur Standardausgabe.
Beispiel:
#include<iostream> #include<cstdio> int main() { char c; for (c = 'a'; c<='z'; c++) putchar(c); for (c = 'A'; c<='Z'; c++) putchar(c); return 0; }-------------------------------------------------------------------------------
2.) Die Funktion get()
Die Funktion get() ist eine öffentliche Elementfunktion, die zur Standarteingabe gehört und führt unformatierte Eingabefunktionen aus.Beispiel:
#include<iostream> #include<fstream> using namespace std; int main() { char c, str[256]; ifstream is; cout << "Geben Sie den Namen der existierenden Datei ein!\n"; cin.get(str,256); is.open(str); while(is.good()) { c = is.get(); if(is.good()) cout << c; } is.close(); return 0; }------------------------------------------------------------------------------
3.) Die Funktion getline()
Die Funktion getline() gehört zur Standarteingabe. Sie entnimmt Buchstaben von is und speichert diese in einem String bis ein Begrenzungsbuchstabe gefunden ist. Im Beispiel ist der Begrenzungsbuchstabe '\n'Beispiel:
#include <iostream> #include <string> using namespace std; int main() { char name[256], titel[256]; cout << "Geben Sie Ihren Namen ein:"; cin.getline(name,256); cout << "Geben Sie Ihren Lieblingsfilm ein:"; cin.getline(titel,256); cout << name << "´s Lieblingsfilm ist " << titel << "\n"; return 0; }------------------------------------------------------------------------------
4.) Die Funktion get()
Sie gehört zur Standarteingabe. Liest einen Block von Daten von n Buchstaben und speichert es gezeigt bei s.Beispiel:
#include<iostream> #include<fstream> using namespace std; int main() { int length; char * buffer; ifstream is; is.open ("test.txt", ios::binary ); // bekommt Länge einer Datei is.seekg (0, ios::end); length = is.tellg(); is.seekg (0, ios::beg); // ordnet Speicher zu buffer = new char [length]; // liest Daten als einen Block is.read (buffer,length); is.close(); cout.write (buffer,length); delete[] buffer; return 0; }Hier bekomme ich die Fehlermeldung:
Invalid allocation size: 4294967295 bytes.
Zwar weiß ich inzwischen, dass es mit einer ungültigen Zuordnungsgröße zu tun hat, aber ich weiß nicht woher und auch nicht warum.
------------------------------------------------------------------------------
5.) Die Funktion peek()
Die Funktion peek() gehört zur Standartausgabe. Sie liest Buchstaben ein und gibt den nächsten Buchstaben aus, ohne ihn zu extrahieren.Beispiel:
#include<iostream> using namespace std; int main() { char c; int n; char str[256]; cout << "Geben Sie eine Nummer oder ein Wort ein:"; c=cin.peek(); if((c >='0') && (c <='9')) { cin >> n; cout << "Sie haben eingegeben Nummer " << n << endl; } else { cin >> str; cout << "Sie haben eingegeben Wort " << str << endl; } return 0; }-------------------------------------------------------------------------------
6.) Die Funktion putback()
Gehört zur Standarteingabe. Dekrementiert deen internen get pointer um 1 und wird der Buchstabe, der als nächstes gelesen wird.Beispiel:
#include<iostream> using namespace std; int main() { char c; int n; char str[256]; cout << "Geben Sie eine Zahl oder ein Wort ein:"; c = cin.get(); if((c>='0')&&(c<='9')) { cin.putback(c); cin >> n; cout << "Sie haben eine Nummer eingegeben " << n << endl; } else { cin.putback(c); cin >> str; cout << "Sie haben ein Wort eingegeben " << str << endl; } return 0; }-------------------------------------------------------------------------------
Ich hoffe, dass ich es richtig verstanden habe???
Gruß
Max
-
Nein.
Der Fehler bei deinem 4. Beispiel kommt daher, dass tellg() im Fehlerfall die -1 zurückgibt. Beim Erzeugen deines Arrays wird diese -1(int) zu einem unsigned int gecastet. Das ergibt die 4,2 Mrd., was genau 2^32 -1 ergibt. In Bytes sind das genau 4 Gigabyte. Und das gibt dir dein Computer/Betriebsystem nicht her -> daher exception von wegen bad_alloc, sprich Fehler.
-
Du bist dir ein bisschen unschlüssig wie Standard geschrieben wird.
Es geht dabei nicht um die Art und weise wie du stehst.
Standarteingabe
-
silent_max schrieb:
1.) Funktion put(char)
Die Funktion gehört zur Standardausgabe. Sie schreibt einen Buchstaben zur Standardausgabe.
Beispiel:
#include<iostream> #include<cstdio> int main() { char c; for (c = 'a'; c<='z'; c++) putchar(c); for (c = 'A'; c<='Z'; c++) putchar(c); return 0; }Ich denk es geht um put(), wieso benutzt du putchar()?
-
Versuch mal das.

#include<iostream> #include<fstream> using namespace std; int main() { int length; char * buffer; ifstream is; is.open ("test.txt", ios::binary ); if(!is) { std::cout << "test.txt ist leider nicht erreichbar; Versuchen sie es spaeter wieder!\n"; return 1; } // bekommt Länge einer Datei is.seekg (0, ios::end); length = is.tellg(); is.seekg (0, ios::beg); // ordnet Speicher zu buffer = new char [length]; // liest Daten als einen Block is.read (buffer,length); is.close(); cout.write (buffer,length); delete[] buffer; return 0; }
-
Ersteinmal danke für die bisherigen Antworten.
Bashar schrieb:
put(), wieso benutzt du putchar()?
Ich habe einmal versucht, es über den Datentyp String zu programmieren.
Hier der Code:
#include<iostream> #include<string> using namespace std; int main() { string Buchstabe; for(Buchstabe='a'; Buchstabe<='z'; Buchstabe++) cout << Buchstabe; return 0; }Jedoch bekomme ich bezogen auf die Zeile 9 folgende Fehlermeldungen:
Error: Kein "<=" - Operator stimmt mit diesen Operanden überein. Error: Kein "++" - Operator stimmt mit diesen Operanden überein.Wo liegt mein Denkfehler??
Gruß
Max
-
silent_max schrieb:
Wo liegt mein Denkfehler??
was sollte denn herauskommen, wenn du einen std::string inkrementierst?
std::string text = "Hallo"; text++; cout << text; // was sollte hier stehen?
-
silent_max schrieb:
Wo liegt mein Denkfehler??
Du benutzt (bzw. versuchst es), Operatoren auf einem std::string zu benutzen, die für diesen nicht definiert sind.
Sagt doch die Fehlermeldung ganz deutlich!
-
daddy_felix schrieb:
silent_max schrieb:
Wo liegt mein Denkfehler??
was sollte denn herauskommen, wenn du einen std::string inkrementierst?
std::string text = "Hallo"; text++; cout << text; // was sollte hier stehen?Welt!
-
daddy_felix schrieb:
was sollte denn herauskommen, wenn du einen std::string inkrementierst?
Ich will halt über den Datentyp String das Alphabet ausgeben.
-
silent_max schrieb:
Wo liegt mein Denkfehler??
Du vergisst immer wieder, dass
charwas anderes ist alschar[] / char*und auch was anderes ist alsstd::string.
Diese drei Typen sind unterschiedlich zu behandeln.
-
DirkB schrieb:
Diese drei Typen sind unterschiedlich zu behandeln.
Wie muss ich denn String behandeln, damit ich über String das Alphabet ausgeben kann?
-
silent_max schrieb:
Wie muss ich denn String behandeln, damit ich über String das Alphabet ausgeben kann?
gar nicht. das machst du mit "char".
-
daddy_felix schrieb:
gar nicht. das machst du mit "char".
Ok.
-
silent_max schrieb:
Wie muss ich denn String behandeln, damit ich über String das Alphabet ausgeben kann?
Das kommt drauf an was du dir wie erhoffst.
int main() { std::string abc = "abcdefghijklmnopqerstuvwxyz"; for(size_t i = 0; i < abc.size(); ++i) cout << abc[i]; cout << endl; for(auto it = begin(abc); it != end(abc); ++it) cout << *it; cout << endl; for(char c : abc) cout << c; return 0; }Sowas wären Möglichkeiten, aber es kommt drauf an was du willst, was du brauchst...