Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C (C89, C99 und C11) ::  Zahlen in dynamisches Int-Array aus Textdatei auslesen  
Gehen Sie zu Seite Zurück  1, 2
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
mrpool89
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.07.2012
Beiträge: 7
Beitrag mrpool89 Mitglied 14:29:33 30.07.2012   Titel:              Zitieren

Ok. Wenn ich beispielsweise so ein Array anlege:

C++:
int* numbers = new int[10];

dann die funktion aufrufe
C++:
readPowersFromTextFile(filename, *numbers, exp);

in der so das Array befülle
C++:
for (int i = 0;i < 10; i++) {                      
numbers[i] = strtok(NULL, &trennzeichen);
}


sagt er mir:

Code:
Error: Der Ausdruck muss den Typ "pointer-to-object" aufweisen

Das ist ja der eigentliche Kern meiner frage gewesen.
Mal abgesehen vom der Speicherreservierung aufm Heap, sollte doch das wenigstens funktionieren.


Zuletzt bearbeitet von mrpool89 am 14:33:13 30.07.2012, insgesamt 1-mal bearbeitet
Swordfish
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.03.2005
Beiträge: 4335
Beitrag Swordfish Mitglied 14:48:20 30.07.2012   Titel:              Zitieren

Ein Sternchen zuviel...
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
void foo( int *p ) {
   
    for( size_t i = 0; i < 10; i++ ) {
   
        p[i] = i + 1;
    }
}
 
int main( )
{
    int *numbers = new int[10];
 
    foo( numbers );
 
    for( size_t i = 0; i < 10; ++i ) {
        std::cout << "numbers[ " << i << " ] = " << numbers[ i ] << '\n';
    }
 
    delete [] numbers;
}


mrpool89 schrieb:
C++:
strtok(NULL, &trennzeichen);

Was soll dabei 'rauskommen?


ot @others: Wie lang' sind denn noch Ferien!? :eek:
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 18395
Beitrag SeppJ Moderator 14:57:01 30.07.2012   Titel:              Zitieren

mrpool89 schrieb:
Ok. Wenn ich beispielsweise so ein Array anlege:

C++:
int* numbers = new int[10];
Dann ist das C++ und wir brauchen an der Stelle gar nicht erst weiter reden, denn in C++ würde man den Rest ganz anders machen.



Zitat:

dann die funktion aufrufe
C++:
readPowersFromTextFile(filename, *numbers, exp);
Dann ist *numbers ind der Notation von oben vom Typ int, was nicht zur Funktionssignatur passt. Das teilt dir der Compiler mit.

Zitat:

in der so das Array befülle
C++:
for (int i = 0;i < 10; i++) {                      
numbers[i] = strtok(NULL, &trennzeichen);
}

Das ist, mit Verlaub, totaler Blödsinn. Guck mal, was strtok zurück gibt und wie man es aufruft.
Zitat:

Mal abgesehen vom der Speicherreservierung aufm Heap, sollte doch das wenigstens funktionieren.
Nein, auch der ganze Rest ist ziemlich falsch. Dir fehlen einfach die Grundlagen, egal wie sehr dir das nicht gefällt. Wenn einfache Funktionsaufrufe schon falsch sind, dann kann der Rest auch nichts werden. Du bekommst einfach viel zu viele Nebenfehler, wenn du die einfachen Sachen nicht beherrscht. In den fünf Zeilen waren vier dicke Fehler, von denen drei mit deinem eigentlichen Problem nichts zu tun hatten. Und dabei war eine dieser Zeilen nur ein '}'!

Zitat:
und ja ich habe ein C Buch vom Galileo Verlag.
Hier ist das Problem. Die sind schlecht, deren Bücher.

Zitat:
Ich dachte man könnte mir hier einen Denkanstoß geben, was ich falsch mache. Anstatt mir zu erzählen, wieso ich die Finger von der dynamischen Speicherverwaltung lassen sollte, hätteste genauso gut in 2 Sätzen mir den Weg zur Lösung weisen können.
Das geht eben nicht, weil du die Grundlagen nicht kannst. Sonst würde ich dir schon zu helfen versuchen, aber dir zu sagen, dass du erst noch was anderes lernen musst, ist momentan die beste Hilfe, die du bekommen kannst.

_________________
Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List


Zuletzt bearbeitet von SeppJ am 14:58:42 30.07.2012, insgesamt 1-mal bearbeitet
mrpool89
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.07.2012
Beiträge: 7
Beitrag mrpool89 Mitglied 15:46:59 30.07.2012   Titel:              Zitieren

C++:
for (int i = 0;i < 10; i++) {                        
numbers[i] = strtok(NULL, &trennzeichen);
}
Damit will erreichen, dass jedes token in jeweils ein Element von numbers geschrieben wird.

Zitat:
strtok zerlegt einen String in Token.
string1 ist der zu zerlegende String, string2 enthält die Trennzeichen, anhand derer der String zerlegt wird.


Zitat:
Der erste Aufruf von strtok überspringt führende Trennzeichen, liefert einen Zeiger auf den Anfang des ersten gefundenen Token in string1 zurück


Zitat:
Folgende Aufrufe von strtok mit dem Wert NULL anstelle des Arguments string1 liefern Zeiger auf weitere Token.


Auf diese Weise bekommen ich auch die Anzahl für die Größe des Arrays ausgelesen
Textdatei:
Code:
Anzahl: 10


Cpp:
C++:
1
2
3
4
5
6
7
8
9
10
    while (fgets(buffer, 255, datei) != NULL ){
            if(strstr(buffer, search_anzahl) != 0) {
                token = strtok(buffer, &trennzeichen);
                if(token != NULL) {
                    token = strtok(NULL, &trennzeichen);
                    sizeofarray = atoi(token);
                }
            }
        }
        ...



Ja ich werde mich wohl weiter selber irgendwie durchkämpfen müssen.
Ich danke trotzdem für die Antworten.
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 18395
Beitrag SeppJ Moderator 15:50:41 30.07.2012   Titel:              Zitieren

mrpool89 schrieb:

Ja ich werde mich wohl weiter selber irgendwie durchkämpfen müssen.
Dann kann ich dir auch nicht weiter helfen. Wenn du die Grundlagen einfach nicht lernen möchtest, sondern stattdessen "kämpfen" willst, dann wirst du scheitern, das verspreche ich dir. Egal wie viel "Kampfeswille" du dir einredest. Aber ich kann dich nicht vor dir selber schützen, sag bloß nicht, dass man dich nicht gewarnt hätte. Die Grundlagen hättest du in einer Woche gelernt, nun wirst du eine Woche Fluchen und am Ende doch nichts haben und auch nichts gelernt haben. Tja.

_________________
Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List
Swordfish
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.03.2005
Beiträge: 4335
Beitrag Swordfish Mitglied 15:52:08 30.07.2012   Titel:              Zitieren

mrpool89 schrieb:
[...] ich werde mich wohl weiter selber irgendwie durchkämpfen müssen.

Dort vielleicht? :o)


Zuletzt bearbeitet von Swordfish am 15:52:37 30.07.2012, insgesamt 1-mal bearbeitet
DirkB
Unregistrierter




Beitrag DirkB Unregistrierter 16:02:05 30.07.2012   Titel:              Zitieren

mrpool89 schrieb:
eine Menge über strtok
nur ...
.. ein Zeiger auf int ist aber etwas anderes als ein Zeiger auf char.
Dein Array numbers und der Rückgabewert von strtok passen nicht zusammen.

Und ein 'Zeiger auf char' oder 'Array von char' muss kein String (im Sinne von C) sein.
c++.de :: C (C89, C99 und C11) ::  Zahlen in dynamisches Int-Array aus Textdatei auslesen  
Gehen Sie zu Seite Zurück  1, 2
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.