(C) Использование строк для чтения значений, а затем для их разделения и токенизации

У меня проблема с преобразованием сканирования моего кода для использования строк, и в настоящее время это приводит к сбою командной строки. Если есть какая-то дополнительная информация, которая облегчит эту задачу, дайте мне знать. Спасибо за любую вашу помощь.

Входные данные (таблица переменных с разделением запятыми.csv):

PART    2       -1    0.05      V
PART    0.975   -1    0.025     V
PART    3        1    0.01      F
GAP     0        0.08   

Моя попытка со строками:

char ch1,ch2,ch3,ch4,c[3],line[100],*n[100],s[3]=",",*token;
float nom[3],impct[3],tol[3],gapmin,gapmax,tolerance,max_gap,min_gap,gap;
int i;
// ---------------------
char keyPart[] = "PART";
char keyGAP[] = "GAP";
// ----------------------

if (fpin==NULL)     //error checking for file
{
    printf("Error opening file!\n");
    fclose(fpin);
    fclose(fpout);      //close files
}
while ( fgets(line, 100, fpin) != NULL )
{
    strcpy(n, line);
    token = strtok(line,s);
    // -----------------
    if (strcmp(keyPart, token) == 0)
    {
        // PART
        for(i=0; i<3; i++)
        {
            token = strtok(NULL,s);
            nom[i] = strtof(token, NULL);
            token = strtok(NULL,s);
            impct[i] = strtof(token, NULL);
        }
    }
    if (strcmp(keyGAP, token) == 0)
    {
        for(i=0; i<3; i++)
        {
            token=strtok(NULL,s);
            gapmin=strtof(token, NULL);// GAP
            token= strtok(NULL,s);
            gapmax= strtof(token, NULL);
        }
    }
    while(token != NULL)
    {
        printf("%s\n", token);
        token = strtok(NULL,s);
    }
}

Мой код перед строками (работает правильно)

for(i=0;i<4;i++)    //loop to scan in values
{
    fscanf(fpin,"%c%c%c%c,",&ch1,&ch2,&ch3,&ch4);     //scan in four characters

    if (ch1=='P' && ch2=='A' && ch3=='R' && ch4=='T' )    //If the characters spell PART...
    {
        fscanf(fpin,"%f,%f,%f,%c\n", &nom[i],&impct[i],&tol[i],&c[i]);   //scan in values
        printf("%f,%f,%f,%c\n",nom[i],impct[i],tol[i],c[i]); //print the values
    }

    if(ch1=='G' && ch2=='A' && ch3=='P')     //If Characters spell GAP...
    {
        fscanf(fpin,"%f,%f",&gapmin,&gapmax);   //scan in values
    }
}

РЕДАКТИРОВАТЬ: устраняет сбой, по крайней мере, прямо сейчас:

for(i=0; i<3; i++)
        {
            token = strtok(NULL,s);
            nom[i] = strtof(token, NULL);
            //token = strtok(NULL,s);
            impct[i] = strtof(token, NULL);
            //printf("\n%f\n%f\n",nom[i],impct[i]);
        }
    }
    if (strcmp(keyGAP, token) == 0)
    {

            token=strtok(NULL,s);
            gapmin=strtof(token, NULL);// GAP
            //token= strtok(NULL,s);
            gapmax= strtof(token, NULL);
            //printf("\n%f\n%f\n",gapmin,gapmax);

    }
    while(token != NULL)
    {
        token = strtok(NULL,s);
        printf("%s\n", token);

    }
}

0 ответов

Другие вопросы по тегам