2011-04-26 97 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