как разделить строку из ввода txt в c

привет, скажем, у меня есть такой ввод:

set 15,10,55,20,30,-30,1
move 0,0
move 2,-1
move 0,0
move 1,-3
move 0,0
move 0,0
move 1,2
move 0,0
move 0,0
move 1,0
changemode 2
move 0,0
move 0,0
move 0,3
move 0,0
goback 1
changespeed 40,40
...
while(1)
    {
        if(fgets(command,128,fptr) != 0)
            {
                if(strncmp(command,"move",4)==0)
                    {
                        fscanf(fptr,"%s %d %d",inputcommand,firstargument,secondargumant);                        
                    }
                if(strncmp(command,"set",3)==0)
                    {
                     fscanf(fptr,"%s %d ....%d",inputcommand,firstargument,secondargumant........,sevenargument);   
                    }
              else{break;}
            }

fscanf возвращается к первой строке и не может прочитать аргументы, как получить аргументы в строке, которую я прочитал


person Lutfiye kaya    schedule 12.03.2015    source источник
comment
возможный дубликат чтения файла в C и разделения строки   -  person Dylan Corriveau    schedule 12.03.2015
comment
Это не будет работать так хорошо, как вы думаете, вы должны прочитать о flex и bison или о подходящем генераторе лексера/парсера для вашей платформы, это поможет вам сэкономить время, и вы создадите надежный парсер.   -  person Iharob Al Asimi    schedule 12.03.2015
comment
Почему вы используете fscanf вместо sscanf?   -  person William Pursell    schedule 12.03.2015


Ответы (2)


Не используйте сканф. Используйте 1_. Если вы передадите ненулевое значение второму аргументу, strtol заполнит его адресом запятой, и вы сможете продолжить синтаксический анализ оттуда.

person William Pursell    schedule 12.03.2015

не используйте fscanf вместо этого используйте sscanf

if(strncmp(command,"move",4)==0)
                    {
                       sscanf(command,"%s %d %c %d",input,&a,&comma,&b);
                    }

с sscanf() вы можете разделить строку, как хотите

person Alper Fırat Kaya    schedule 13.03.2015