Вы можете начать с удаления первого цикла и других переменных.Первый strtok должен находиться вне цикла, который поможет вам разделить каждый токен, это нужно сделать для того, чтобы сохранить буфер, который вы хотите обработать, в функции strtok.Вы не можете повторно использовать функцию strtok, пока не будете уверены, что больше не хотите делить свои основные данные, потому что, если вы повторно используете strtok до окончания основной обработки, вы сбрасываете данные, используемые функцией strtok.пример:
char str[] = "hello world how are you?\n";
char *res;
// here i tell strtok the string str is the one i want to separate
res = strtok(str, " \n");
int i = 0;
// here i separate str, using the caracters space and endline as separators
while (res != null)
{
res = strtok(NULL, " \n"); // each time i pass in this part of the loop i get my new word in res
++i; // here the variable i represents the number of times i enter the loop
}
// here i can use again strtok with another string
Если функция sscanf разрешена в вашем назначении, и, поскольку вы, кажется, знаете точный формат вашего файла, вы можете использовать его.Также функция getline позволяет вам извлекать строку за строкой вашего файла, и вы можете обрабатывать каждое предложение за раз.