2012-04-22 133 views
-1

使用C++,我正在使用fgets將文本文件讀入char數組,現在我想要獲取此數組中每個元素的索引.i.e。 line [0] = 0.54 3.25 1.27 9.85,那麼我想在單獨的數組中返回行[0]的每個元素,即readElement [0] = 0.54。 我的text.txt文件的格式爲:0.54 3.25 1.27 9.85 1.23 4.75 2.91 3.23 這裏是我寫的代碼:獲取數組中每個元素的索引

char line[200]; /* declare a char array */ 
char* readElement []; 

read = fopen("text.txt", "r"); 
while (fgets(line,200,read)!=NULL){ /* reads one line at a time*/ 
printf ("%s print line\n",line[0]); // this generates an error 

readElement [n]= strtok(line, " "); // Splits spaces between words in line 
    while (readElement [1] != NULL) 
    { 
printf ("%s\n", readElement [1]); // this print the entire line not only element 1 

    readElement [1] = strtok (NULL, " "); 
    } 
n++; 
} 

感謝

+0

的另一種方法[如何把輸入字符串從標準輸入輸出到載體中,每個容器中的一個字(http://stackoverflow.com/questions/8062545/c-how-to-put-an- input-string-from-stdio-into-a-vector-one-word-per-container) – 2012-04-22 06:29:58

+0

你說你用C++編碼,但是我看到的只是C. 聽起來你的文本文件在每一行上有多個值。 你有沒有考慮過使用二維數組? – 2012-04-22 06:42:39

回答

0

readElement看起來誤報的。只要將它聲明爲指向字符串開頭的指針即可:

char* readElement = NULL; 

您不檢查fopen的返回值。這是最可能的問題。因此,如果文件沒有真正打開,那麼當你將它傳遞給printf時,「行」就是垃圾。

而且,如果您實際上想將行的每個元素存儲到數組中,則需要爲其分配內存。

另外,不要將變量命名爲「read」。 「讀取」也是較低級別函數的名稱。

const size_t LINE_SIZE = 200; 
char line[LINE_SIZE]; 
char* readElement = NULL; 
FILE* filestream = NULL; 

filestream = fopen("text.txt", "r"); 
if (filestream != NULL) 
{ 
    while (fgets(line,LINE_SIZE,filestream) != NULL) 
    { 
     printf ("%s print line\n", line); 

     readElement = strtok(line, " "); 
     while (readElement != NULL) 
     { 
      printf ("%s\n", readElement); 
      readElement = strtok (NULL, " ");  
     } 
     } 
    } 
    fclose(filestream); 
} 
+0

感謝selbie給你快速回復,但我想將文本文件的每一行存儲在一個數組中,然後在程序中稍後使用每個元素。即我想讀取這行行[0] = 0.54 3.25 1.27 9.85,然後使用readElement [0] = 0.54提取此數組的一個元素。如何實現這一目標?乾杯 – user999 2012-04-22 07:12:56

+0

你首先需要計算行數中有多少個元素(數字),然後分配一個適當大小的數組來保存每個元素(數字)。然後,數組中的每個元素都應該具有適當的大小以保存每個字符串。 – selbie 2012-04-22 17:35:58

相關問題