Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » 2D-Array

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
29.05.2004, 17:00 Uhr
~hansli
Gast


Hi Leute, Ich möchte Integer Werte aus einem ini-File auslesen und die in ein 2D- Array abfüllen. Im main wird das 2D-Array dynamisch erstellt. Um die Werte aus dem File in das Array abzufüllen, habe ich eine Funktion gschrieben. Um die Werte in das lokale Array abzufüllen muss ich der Funktion einen Pointer übergeben. Bei eindimensionalen Arrays ist dies ja auch keine Problem. Ich dachte, bei einem 2D-Array funktioniert das genau gleich also übergebe ich der Funktion die Adresse auf das erste Element, was zur Folge hat, das ich in der Funktion nur noch einen "eindimensionalen" Pointer habe. In der Funktion schreibe ich nun den ersten wert in den Pointer und incrementier ihn anschliessen. Wenn ich im main anschliessend die Matrix ausgebe, stimmt die erste Zeile, die zweite fängt aber mit dem Wert an, der eigeltich an dritter stelle stehen sollte, wo durch die zwei letzten Werte die ersten beien der dritten Zeile sind u.s.w. Hier noch der Code der Funktion:
Aufruf: error=loadpopulation(&pop[0][0]);

Das aufüllen der Werte in das Array passiert in der zweiten inneren For-Schleife.


C++:
bool loadpopulation(int *population)
{
   int count,countt,countf;
   char ch;
   char temp[30];
   for(count=0;count<anzInd;count++)
   {
     cout<<ch<<" ";
     for(countt=0;countt<sizeof(temp)&&ch!='='&&ch!=EOF;countt++)
     {
       ch=fgetc(in);
       cout<<ch;
     }
     system("pause");
     system("cls");
     ch=fgetc(in);
     for(countf=0;countf<anzTopf;countf++)
     {
       for(countt=0;countt<sizeof(temp)&&ch!=','&&ch!='\n'&&ch!=EOF;countt++)
       {
         temp[countt]=ch;
         ch=fgetc(in);
       }
       ch=fgetc(in);
       temp[countt]='\0';
       *population=int(atof(temp));
       population++;
     }
   }
  return(true);




Bearbeitung von typecast:
cpp-Tags gesetzt

Dieser Post wurde am 29.05.2004 um 17:09 Uhr von typecast editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.05.2004, 17:18 Uhr
typecast
aka loddab
(Operator)


Das passt wohl eher ins ANSI Forum. Da ist nichts Windowsspezifisches dabei
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.05.2004, 17:20 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


öhm irgendwie bereit mir dein code starke kopfschmerzen... erstens peil ich immer noch nicht so richtig was du da genau machen willst und zum anderen ist das ja ein recht starker mischmasch aus c und c++... soll es denn nun c oder c++ sein...

wie sieht die datei aus aus der du einliest?
wo willst du genau was reinlesen?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.05.2004, 00:14 Uhr
~hansli
Gast


Erstens sorry, dass ich das Falsche Forum erwischt habe.
Zweitens: Ich kenne mich bei C besser aus als bei C++, habe schon lange nichts mehr programmiert und deshalb ist auch der mischmasch code entstanden. das auslesen aus der Datei funktioniert wunderbar. Der Fehler passiert beim Abfüllen in das 2D Array. Wie ist das eigentlich bei einer Matrix, werden die einzelnen Zeichen im Speicher direkt hinter einander gelegt. Hier ist noch das ini File:

1=173,169,175,314,512,419,437,333,437,419,512,314,175,169,173
2=224,544,481,468,280,145,126,280,126,145,280,468,481,544,224
3=273,603,475,445,310,172,148,354,148,172,314,445,473,595,270
4=197,548,380,434,330,217,143,406,143,217,330,434,380,548,197
5=253,571,418,457,365,207,159,425,159,207,365,457,418,571,253
6=290,392,428,141,295,517,549,343,239,457,225,268,502,509,129
7=161,121,461,437,531,388,532,491,287,132,350,528,243,234,261
8=446,377,233,132,183,490,362,235,354,620,237,205,462,473,298
9=430,463,148,403,468,146,399,503,394,407,167,303,179,256,514
10=393,550,163,589,577,564,124,307,254,576,277,267,234,474,197

Ich möchte nun die einzelnen 3-stelligen zahlen genau so wie sie hier stehen in das 2D-Array abfüllen welches im main dynamisch erzeugt wird:
...

C++:
int **pop;                                    //Populations-Matrix (alte Generation)
pop = (int**) calloc (anzInd, sizeof (int*));
for (int i = 0; i < anzInd; i++)
{
    pop[i] = (int*) calloc (anzTopf, sizeof (int));
}


...

Wenn ich die Zahlen in der Funktion ausgebe, sieht es aus als würde alles stimmen, gebe ich sie aber im main aus erhalte ich folgendes.

173,169,175,314,512,419,437,333,437,419,512,314,175,169,173
468,280,145,126,280,126,145,280,468,481,544,224,273,603,475
148,354,148,172,314,445,473,595,270,197,548,380,434,330,217
217,330,434,380,548,197,253,571,418,457,365,207,159,425,159
418,571,253,290,392,428,141,295,517,549,343,239,457,225,268
161,121,461,437,531,388,532,491,287,132,350,528,243,234,261
132,183,490,362,235,354,620,237,205,462,473,298,430,463,148
399,503,394,407,167,303,179,256,514,393,550,163,589,577,564
576,277,267,234,474,197,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

Die erste Zeile stimmt wunderbar, bei der zweiten Zeile fehlen die ersten beiden Werte, die letzten beiden sind dafür die ersten beiden der dritten Zeile u.s.w.?


Bearbeitung von Pablo:

Bitte, benutze die cpp tags selber, danke.


Dieser Post wurde am 30.05.2004 um 01:24 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.05.2004, 11:47 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
ich hab keine Lust mich durch den ganzen Wust zu beißen, aber
fgetc liefert ein int und deine Variable char ch nimmt den Wert auf.
EOF ist als -1 definiert und char sagt nichts über ein eventuelles Vorzeichen aus.Kann auf verschiedenen Betriebssystemen unterschiedlich sein....

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.05.2004, 11:53 Uhr
(un)wissender
Niveauwart


Klar sagt char was über ein Vorzeichen aus. Es ist ein signed Byte.
Mal ganz unabhängig von der Aufgabe, die ich mir nciht angesehen habe.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
30.05.2004, 12:35 Uhr
Spacelord
Hoffnungsloser Fall



Zitat:
(un)wissender postete
Klar sagt char was über ein Vorzeichen aus. Es ist ein signed Byte.
Mal ganz unabhängig von der Aufgabe, die ich mir nciht angesehen habe.


Wo steht das?

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
30.05.2004, 13:01 Uhr
(un)wissender
Niveauwart


Wie wo steht das?
In jedem normalen C/C++ Buch.
Statt signed char kann man char schreiben, so wie man statt signed int int schreiben kann.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
30.05.2004, 13:08 Uhr
Spacelord
Hoffnungsloser Fall


Der Standard legt nichts dergleichen fest!!
Die gängigsten Betriebssysteme machen das so dass bedeutet aber nicht dass es so sein muss!!
Das einzige was der Standard festlegt ist ne Hierarchie der Datentypgrößen und Mindestgrößen für short und long.
Ob char ein Vorzeichenbit hat oder nicht,darüber wird kein Wort verloren.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
30.05.2004, 13:09 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


um mal aufs thema zurückzukommen...
wenn du es in c machen willlst empfehle ich dir folgende vorgehensweise...
lies ne kompeltte zeile mit fgets ein und benutze dann strtok oder sscanf um die einzelnen zahlen herauszubekommen...
(kannst auch gleich einen längeren fscanf benutzen...)
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: