2011-03-11 47 views
0

我需要指定一個包含300000個數據的字符數組,這個數組是從包含以列格式(其龐大的數據文件)排列的200,000個數字的Numbers.dat文件中獲取的。操作是從該文件中提取數據並將其存儲在300000的數組中,以便將這些300000數字再次存儲在不同的文件中。此操作針對兩個文件執行,因此這兩個文件的子集的形式爲錯誤數組大小

-0.98765 
-0.124567 

etc 但我得到兩個錯誤:首先是語法錯誤,說數組大小太長,另一個是邏輯錯誤。如何解決這個問題。該代碼是如下由槍手在How to read blocks of numbers from a text file in C提供,但不用於這種情況下

#include <stdio.h> 
#include<stdlib.h> 
# include <conio.h> 
# include <dos.h> 
# include <math.h> 

    void main() 
    { FILE *fpt1,*fpt2,*fpt; 
    fp=fopen("numbers.dat","r"); 
fpt1=fopen("subset1.dat","w"); 
fpt2=fopen("subset2.dat","w"); 

int index=0; 
char anum[300000]; //this is the reason for the first syntactic error :Array size too large 

      // since we are not calculating, we can store numbers as string 
      while(fscanf(fp,"%s",anum) == 1) 
      { 
       if(index==0) 
       { 
      // select proper output file based on index. 
      fprintf(fpt1,"%s",anum); 
       index++; } 
       if(index ==300000) 
       { 
       fprintf(fpt2,"%s",anum); 
       index++; } 

      } 

fclose(fp); 
fclose(fpt1); 
fclose(fpt2); 
} 

邏輯錯誤是,只有一個號碼被寫入在文件SUBSET1和SUBSET2甚至當我減小尺寸至300塊時的工作數據的。

+2

請顯示您的代碼? – 2011-03-11 08:34:58

+2

哪個來源?哪個編譯器?哪個命令行?哪個錯誤信息?如何以智能的方式提出問題:http://www.catb.org/~esr/faqs/smart-questions.html – DevSolar 2011-03-11 08:36:03

+0

@To all:我有TURBO C++ FOR WINDOWS 4.5。 – SKM 2011-03-11 08:50:12

回答

4

您的編譯器不支持具有這種容量的靜態數組。使用一個允許這個(大多數現代編譯器)的編譯器。

您也可以嘗試動態分配內存。

+0

@Gunner:數組大小對於您回答樣本時使用大小爲100的字符數組時所回答的問題是必需的。在實際情況下,每個文件應該包含2359296數據(數字)。所以我認爲你已經遵循了錯誤和問題。 :) – SKM 2011-03-11 08:53:43

+0

@SKM:你明白什麼是動態內存? Gunner的建議是「int * p = malloc(300000 * sizeof(int));」。它應該可以工作,即使是使用那個舊的編譯器; -P。 – 2011-03-11 09:06:22

+0

@Gunner和Tim:除了動態內存分配以外沒有其他選擇嗎?我已經用代碼 – SKM 2011-03-11 09:15:10