For循环的行为很奇怪

for loop behaving weird

本文关键字:循环 For      更新时间:2023-10-16

这是我的代码:

for(b = 0; b < 3; b++)
{
    int col1 = 0;
    printf("b= %dt" , 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("%dn" ,pp);
        grapharray[b][col1++] = pp;
    }
}

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

如果你的第二个

token = strtok(NULL, " ");             

返回NULL, while循环将不会进入,并且看起来好像b=2被丢弃了=>用调试器检查token的值,或者检查你的解析器。

编辑:

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

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

参见使用fgets从文件中读取字符串