2014-10-18 45 views
2
void initializeCar(Car* v,char* mainFileIn) 
{ 
    int counter = 0; 
    int i = 0; 
    FILE* fp = fopen(mainFileIn, "r"); 
    char* line = NULL; 
    size_t len = 0; 
    ssize_t read; 
    char* pch; 

    while((read = getline(&line, &len,fp)) != -1) 
    { 
     if(i == 50) 
     { 
      printf("Cannot hold more than 50 Cars."); 
      exit(1); 
     } 

     pch = strtok(line,","); 
     v[i].pid = ++counter; 
     v[i].xLocation = (float)strtod(pch,NULL); 

     printf("pch: %s\n",pch); 

     pch=strtok(NULL,","); 
     printf("pch: %s\n",pch); 

     v[i].yLocation = (float)strtod(pch,NULL); 

     pch = strtok(NULL,","); 

     printf("pch: %s\n",pch); 

     v[i].velocity = (float)strtod(pch,NULL); 

     pch = strtok(NULL,","); 

     printf("pch: %s\n",pch); 

     v[i].angle = (int)strtol(pch,NULL, 10); 
     v[i].start = NULL; 
     i++; 

    } 
    free(line); 
    fclose(fp); 
} 

由於某些原因,我的代碼中的所有內容除了在我的最後一行之後讀取一行外,還給了我一個分段錯誤。我無法弄清楚爲什麼,因爲我根據getLine教程中的一個while循環來建模http://man7.org/linux/man-pages/man3/getline.3.html爲什麼我的getLine在這個c函數中走得太遠了?

+0

您是否在閱讀完之後嘗試打印該行,以確保獲得了您認爲正在獲取的數據? – 2014-10-18 05:51:18

回答

3

您的文件末尾可能有空行,導致pch爲空。你的程序應該處理不包含逗號的行。

+0

@Aaron你可以接受我的答案......這就是它的工作原理。我不認爲你需要rep up to upvote。 – 2014-10-18 07:01:28

+0

@JimBalter需要15代表upvote。如果你贊成這個問題,他可以贊同答案:)無論如何,他確實應該接受答案。 – user3386109 2014-10-18 07:36:25

+1

@ user3386109好的,他現在得到了代表! – 2014-10-18 07:37:57

-1

您正在捕獲行尾的\ n字符。

+0

getline確實讀取\ n並將其包含在內,但這並不能解釋任何內容。 – 2014-10-18 04:48:42

+0

你能解釋我是如何捕獲\ n字符的?我不太明白如何捕捉它。 – Aaron 2014-10-18 05:49:02

+0

@Aaron getline返回的數據包含換行符(如果有的話)...請參閱文檔。那就是你想要的;這不是問題。這個答案是簡單的基礎。 – 2014-10-18 07:03:32

相關問題