Kurze Frage , Kurze Antwort
-
bzw. :
void array_pointer_overload(int (*irgendwas)[3]){ ..
-
void array_pointer_overload(int (*test)[3]) { for(int i : *test) { cout << i << '\n'; } }
-
Und wie ändert man da z.B. den wert [2] ?
-
Das wäre doch dann
*(*test+2) = 45 ?? Das macht es Syntax Technisch nicht gerade leichter?
-
(*test)[2] = new_val;Referenzen auf Arrays sind da aber angenehmer, da spart man sich die Dereferenzierung.
-
wie würde das dann aussehen?
-
So oder :
void array_pointer_overload(int (&test)[3], int item) { std::cout << "with ref: \n"; std::cout << test[item]; }
-
Kann ich eine Do While schleife in einer Do while schleife haben?
Beispiel:
do { <restlicher code> do { <mehr restlicher code> }while (X != 1) }while (y != 1)
-
Wieso nicht. Probiers doch einfach aus.
-
Skym0sh0 schrieb:
SeppJ schrieb:
Skym0sh0 schrieb:
Zur Not machst dus wie die Standardbibliothek und machst halt Templates aus den Parametern:
Das sollte nicht der Notfall, sondern der Normalfall sein. Ich bin gerade nur etwas verwirrt, ob der TE einen legitimen Grund hat, das nicht so zu machen, oder ob er das einfach nur nicht kennt.
Sollte es echt der Normalfall sein?

Ich mein, man müsste die Funktion ja dann allgemein halten.Und eigentlich fehlen dann noch type_traits und sowas...
Andersrum: Wenn man eine allgemeine Funktion wünscht (oder die Funktion sowieso schon allgemein ist*), dann ist dies der normale Weg.
*: Ich weiß nicht, wie es euch geht, aber ich habe andauernd den Fall, dass ich bei einer Funktion Eigenschaften wie "eigentlich ist es ganz egal, welche Art von Daten sie verarbeitet, Hauptsache irgendwie iterierbar" oder ähnliches bemerke+. Dann kann und werde ich diesen Umstand auch nutzen. Vielleicht programmiere ich auch unterbewusst abstrakter als die meisten anderen Leute.
+: Normalerweise nicht im Nachhinein, sondern schon im Voraus, wenn ich mir die Aufgabe der Funktion überlege und wie sie dies ungefähr umsetzt. Aber es ist auch schon vorgekommen, dass ich die Abstraktion erst im Nachhinein bemerkt habe.
-
Again, kurze Frage zum "zeichen für zeichen" einlesen :
char buffer[20] std::ifstream datei("test.txt", std::ios_base::in); for (int i = 0; i < ...){ buffer[i] = datei.get(); //oder datei.get(buffer[i]); }Egal, oder ist eine Verison vorzuziehen?
-
Nachtrag:
oder wenn ich die Länge des Textes weiß, Variante 3:
char *cp = new char [len] ; datei.getline(cp, len);
-
int_type get();- Reads one character and returns it if available. Otherwise, returns Traits::eof() and sets failbit and eofbit.
basic_istream& get(char_type& ch);- Reads one character and stores it to ch if available. Otherwise, leaves ch unmodified and sets failbit and eofbit. Note that this function is not overloaded on the types signed char and unsigned char, unlike the formatted character input operator>>.
- liefert dir im Fehlerfall eof zurück, 2) ändert im Fehlerfall buffer[i] nicht.
Ich würde 2) verwenden, weil man dann einfach schön den Stream prüfen kann.
if (!datei.get(buffer[i])) error();
-
cpp_beg schrieb:
Nachtrag:
oder wenn ich die Länge des Textes weiß, Variante 3:
char *cp = new char [len] ; datei.getline(cp, len);Vorausgesetzt du verwendest ordentliches RAII und kein new.
-
Ich check das mit dem RAII nicht ganz. Hab mir den Wikipedia Artikel schon durchgelesen, aber wie wäre das in oben geannten Bspl. angewandt?
-
beg_offl schrieb:
Ich check das mit dem RAII nicht ganz. Hab mir den Wikipedia Artikel schon durchgelesen, aber wie wäre das in oben geannten Bspl. angewandt?
Zum Beispiel mit dem Nutzen von std::vector oder std::unique_ptr<char[]>.
-
Nathan schrieb:
int_type get();- Reads one character and returns it if available. Otherwise, returns Traits::eof() and sets failbit and eofbit.
basic_istream& get(char_type& ch);- Reads one character and stores it to ch if available. Otherwise, leaves ch unmodified and sets failbit and eofbit. Note that this function is not overloaded on the types signed char and unsigned char, unlike the formatted character input operator>>.
- liefert dir im Fehlerfall eof zurück, 2) ändert im Fehlerfall buffer[i] nicht.
Ich würde 2) verwenden, weil man dann einfach schön den Stream prüfen kann.
if (!datei.get(buffer[i])) error();Würde dann folgendes Reichen um eine Datei Zeichen für Zeichen einzulesen? Das ist Fehlerprüfungstechnisch etwas dünn oder??
std::fstream orig("orig.txt", std::ios_base::in); char c; while( orig.get(c) ){ std::cout << c; }
-
Solte ich EOF evtl. mit einbauen?
while( orig.get(c) ){ if ( c != EOF) { //??? std::cout << c; } else.... }
-
beg_offl schrieb:
Solte ich EOF evtl. mit einbauen?
Nein, c kann nie EOF sein.
Die erste Version ist absolut richtig und deckt alle Fehler ab.
-
Ähm ja, c sollte dann natürlich ein INT sein.
Also brauch ich gar keine Abfragen mehr auf EOF machen?