2013-04-21 92 views
0

此代碼將讀取文件,並且只要該文件打印這種格式跳過線,而文件掃描多行

word,12,34 
words,40,20 
another,20,11 

我如何得到它做相同的,如果它有一個空行在之間喜歡這樣,因爲現在它只是給了我一個分段錯誤

word,12,34 

words,40,20 

another,20,11 



#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
int main (int argc, char *argv[]) 
{ 
    FILE *pdata; 
    char buffer[1000]; 
    char *token, *del=","; 
    int value1; 
    double value2; 


    pdata = fopen ("file.data", "r"); 

    if(pdata == NULL) 
    { 
     printf("unable to open file \n"); 
     exit(1); 
    } 

    while(fgets(buffer, sizeof(buffer), pdata) != NULL) 
    { 
     token = strtok(buffer, del); 
     value1 = atoi(strtok(NULL, del)); 
     value2 = atof(strtok(NULL, del)); 

     printf("%s is %.3lf\n", token, value1 + value2); 

    } 

    fclose(pdata); 


return 0; 
} 

請幫助

+0

測試'token'是否爲NULL?如果是的話,不要在接下來的兩行執行'atoi'轉換('if(token!= NULL){value1 = ...'我認爲應該這樣做) – Floris 2013-04-21 05:20:20

+0

如何以及在哪裏做那 – Tatan1 2013-04-21 05:26:58

+0

即時通訊 – Tatan1 2013-04-21 05:27:16

回答

1

陳二GES我會做:

char *del = ", "; // test for either space or comma 

和(按我的問題先前的評論):

while(fgets(buffer, sizeof(buffer), pdata) != NULL) 
{ 
    char *temp; 
    token = strtok(buffer, del); 
    if (token != NULL) { 
     temp = strtok(NULL, del); 
     if (temp) value1 = atoi(temp); 
     temp = strtok(NULL, del); 
     if (temp) { 
     value2 = atof(temp); 
     printf("%s is %.3lf\n", token, value1 + value2); 
     } 
} 

strtok將如果沒有令牌被發現返回NULL。傳遞一個NULL字符串到atoi是什麼給你seg錯誤,我猜。像這樣,我們絕對確信不會發生。我測試了這個,它工作。

+0

仍然是分段 – Tatan1 2013-04-21 05:39:22

+0

看到我最近的編輯。我將每個'strtok'的結果賦給'temp'變量,並在執行'atof'的atoi'前測試它。 – Floris 2013-04-21 05:44:54

+0

我試過了分段錯誤和我的價值觀沒有正確添加這是奇怪的 – Tatan1 2013-04-21 05:48:54

0
while(fgets(buffer, sizeof(buffer), pdata) != NULL) 
{ 
    if (buffer[0] == '\n') { 
     /* empty line */ 
     continue; 
    } 
    token = strtok(buffer, del); 
    value1 = atoi(strtok(NULL, del)); 
    value2 = atof(strtok(NULL, del)); 

    printf("%s is %.3lf\n", token, value1 + value2); 

} 
+0

仍然得到分段錯誤 – Tatan1 2013-04-21 05:25:38

+0

你的空行只是一個換行符,還是它們中有空格? – Barmar 2013-04-21 05:26:47

+0

他們是空行 – Tatan1 2013-04-21 05:31:32