跳过线,而文件扫描多行

问题描述:

此代码将读取文件,并且只要该文件打印这种格式跳过线,而文件扫描多行

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

陈二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

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