2011-04-26 141 views
0

這是我的代碼:for循環行爲怪異

for(b = 0; b < 3; b++) 
{ 
    int col1 = 0; 
    printf("b= %d\t" , b); 
    fgets(payload, sizeof payload, f2); 
    fputs(payload, stdout); 
    char *token; 

    token = strtok(payload, " "); 
    token = strtok(NULL, " "); 
    token = strtok(NULL, " "); 

    while (token != NULL) 
    { 
     int pp; 
     sscanf(token, "%d", &pp); 
     token = strtok(NULL, " "); 
     printf("%d\n" ,pp); 
     grapharray[b][col1++] = pp; 
    } 
} 

在這段代碼中,我通過線以從文件行一些值,並將其複製到一個二維數組。我正在跳過文件中的前兩個值。除了我的循環外,一切工作正常 - 它將該值正確複製到位置grapharray[b][col1],其中b==0,但然後跳過b==1並直接移動到b==2,並複製文件的下一行grapharray[2][col1]。任何人都可以幫我解決這個問題嗎?非常感謝,我將不勝感激。

+2

請修正縮進在你的代碼,以便它看起來神志清醒。 – 2011-04-26 18:48:57

+0

哦..先生請告訴我如何做到這一點 – tariq 2011-04-26 18:50:33

+2

大寫句子的開頭也不會傷害。 – 2011-04-26 18:51:10

回答

3

如果你的第二個

token = strtok(NULL, " ");    

返回NULL,while循環將不被輸入,它會看,如果B = 2丟棄 =>使用調試器檢查的標記值,也許審查你的解析器。

編輯

如果您解析數據包含代替空間選項卡(\ t),這是可能發生的。也許你想在你的標記器中使用「\ t」。

+0

先生,但我所有的行再次有相同數量的條目 – tariq 2011-04-26 19:03:22

+1

,與調試器或printf檢查:它很便宜,可能會縮小您的調查領域。如果我的假設是真的,那麼你可以分析這個特定的行或者可能轉儲你的數據... – Bruce 2011-04-26 19:06:16

0

如果您嘗試從文件中逐行讀取一行,fgets()不是最好的工具。如果行中有更多的字符在目標數組中有空間,則不會讀取這些字符。

Using fgets to read strings from file in C