for循环表现怪异

时间:2011-04-26 18:46:37

标签: c++ c gcc

这是我的代码:

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;
    }
}

在这段代码中,我逐行从文件中获取一些值并将它们复制到2D数组中。我正在从文件中跳过前两个值。除了我的循环之外,一切正常 - 它将值正确复制到grapharray[b][col1]的位置b==0,然后跳过b==1并直接移至b==2并复制下一个grapharray[2][col1]处文件的一行。任何人都可以帮我解决这个问题吗?非常感谢,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

如果你的第二个

token = strtok(NULL, " ");             

返回NULL,不会输入你的while循环,看起来好像b = 2被丢弃了 =&GT;用调试器检查令牌的值,然后检查你的解析器。

修改

如果您的解析数据包含制表符(\ t)而不是空格,则可能会发生这种情况。也许你想在你的标记器中使用“\ t”。

答案 1 :(得分:0)

如果您尝试从文件中一次读取一行,fgets()不是最好的工具。如果您在目标数组中有空间的行中有更多字符,则不会读取这些字符。

请参阅Using fgets to read strings from file in C