2012-04-04 7 views
0

Ich habe eine Datendatei namens Somedata.dat, es enthält eine Liste von Zahlenpaaren. ungefähr 10000 Paare. Wie folgt aus:So speichern Sie eine große Menge von Daten in einem Array in C

3 19 
5 213 
1 34 
7 93 

Ich versuche, die Datei zu öffnen, und lesen Sie sie, dann legte die Zahlen in einem 10000x2 Array. Mit dem folgenden Code wird jedoch nicht mehr ausgeführt, wenn die Schleife ungefähr das 80000ste Mal (EOF) erreicht. Irgendwelche Ideen? Vielen Dank.

int main(int argc, char *argv[]) 
{ 

int data[10000][2]; 
FILE *fp; 

char s[5]; 
char temp[2]; 
char cur; 
char next; 
int pid=0; 
int k=0; 

fp = fopen("c:\\somedata.dat","r"); 
while (!EOF) 
{ 
    cur = fgetc(fp); 
    if (cur==' ') 
    {   
     data[pid][0]=atoi(s); 
     memset(&s[0], 0, sizeof(s)); 
    } 
    else if (cur=='\n') 
    { 
     data[pid][1]=atoi(s); 
     pid++; 
     memset(&s[0], 0, sizeof(s)); 
    } 
    else 
    { 
     temp[0]=cur; 
     temp[1]='\0'; 
     strcat(s,temp); 
    } 
} 
+2

'while (k! = 80000)' - Sind Sie sicher, dass Sie nicht _ask_ dafür gearbeitet haben, nicht mehr zu funktionieren? – sarnold

+0

ich bin in keiner Weise C-Experte. aber solche großen Arrays sollten im Heap sein. malloc es. – Nahum

+1

Sie sollten mit Heap allokierte Arrays (mit 'calloc') verwenden, um mit großen Datenmengen umgehen zu können. –

Antwort

0

Das Array kann eingerichtet und gespeichert werden. Die Verwendung von malloc macht jedoch mehr Sinn. Danke allen.

0

Sie haben geschrieben:

while (k!=80000) 

könnte der Grund sein, um zu stoppen 80,000

+0

Entschuldigung sollte (! EOF) sein – eastboundr

+0

EOF ist eine Konstante, was ist ihr Wert? Sie sollten EOF mit den gelesenen Daten vergleichen. – Tarion

+0

gut, ich versuche nur, die While-Schleife das Ende der Datei zu erreichen ... Ich dachte, EOF tut es ... – eastboundr

1

Edit:

Sie definieren ein Array von 20.000 und versuchen hinzufügen 10.000 Paris, und es bleibt bei 80.000?

Würde es vermuten, da Sie keine Pause in der Schleife haben, liest es 10.000, dann lesen Sie EOF 70.000 mal + tun ein paar seltsame Sachen zum Array. Dann geht es.


Sie müssen EOF mit etwas vergleichen.

typisch:

int c; /* Has to be int, not char */ 

while((c = fgetc(fh)) != EOF) { 

    ... 
} 

Auch; Werfen Sie einen Blick auf fscanf, von stdio.h. Vielleicht besser für Ihre Verwendung geeignet.


Ebenso gut; fgetc() abrufen ein und ein int darstellbare als char oder EOF.

I.e. Datei:

12 33 
16 693 

Dann würde fgetc abrufen:

1: '1' 
2: '2' 
3: ' ' 
4: '3' 
5: '3' 
6: '\n' 
7: '1' 
8: '6' 
... 

Weitere: Überprüfen Sie, wenn Sie Funktionen verwenden. Wenn fgetc() EOF zurückgibt, dann ist entweder bei EOF oder ein Lesefehler aufgetreten. Überprüfung mit Feror usw.


+0

Danke, Aber wissen Sie, wie man den Code optimiert, so dass er nicht feststeckt, sobald der Loop mehr als 80000 Mal läuft? Vielen Dank! – eastboundr

+0

Ich würde sagen, er * muss * in seinem Fall fscanf benutzen. – ShinTakezou

+0

gibt es keine intrinsischen "80000" Grenzen in diesem Code. Es stoppt, wenn die Datei beendet wird (Vorsicht vor Pufferüberlauf) – ShinTakezou

Verwandte Themen