за цикл ведёт себя странно - PullRequest
0 голосов
/ 26 апреля 2011

Это мой код:

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 ]

3 голосов
/ 26 апреля 2011

если ваш второй

token = strtok(NULL, " ");             

возвращает NULL, ваш цикл while не будет введен и будет выглядеть так, как будто b = 2 был отброшен => проверьте с помощью отладчика значение токена и, возможно, проверьте ваш парсер.

EDIT

Если ваши проанализированные данные содержат пробел (\ t) вместо пробела, это может произойти. Возможно, вы хотите использовать «\ t» в вашем токенизаторе.

0 голосов
/ 27 апреля 2011

Если вы пытаетесь читать строки, по одному из файла, fgets () не лучший инструмент.Если в строке есть больше символов, для которых у вас есть место в целевом массиве, эти символы не будут читаться.

См. Использование fgets для чтения строк из файла в C

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...