Игнорировать первые два слова при чтении из файла - PullRequest
0 голосов
/ 16 марта 2019

Моя программа читает текстовый файл, который содержит некоторую информацию (имя, продукт, стоимость, время). Мне нужно скопировать два последних и написать их где-нибудь еще. Код должен быть на C.

Это то, что я написал до сих пор, но из-за случайной длины первых двух полей (имя, продукт) он не работает должным образом.

int a=25;
while (!feof(fp)){
    fseek(fp,a,SEEK_SET);
    fgets(ratetime,100,fp);
    fputs(ratetime,fp2);
    a=a+40;     
}

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Если вы уже знаете формат файла, вы можете просто использовать fscanf, например:

FILE* fp = fopen("input_file.txt", "r");
char name[BUFFSIZE];
char product[BUFFSIZE];
int rate;
char time[BUFFSIZE];

while(fscanf(fp, "%s %s %d %s", name, product, rate, time) != EOF)
{
    //copy them in a proper data stucture
}

fclose(fp);

РЕДАКТИРОВАТЬ: BUFFSIZE это верхняя граница для размера строки, если вы это знаете. Если нет, то вы прочитали char за char и проанализировали их

0 голосов
/ 16 марта 2019

Сначала прочитайте, почему (! Feof (fp)) всегда неверно .

Это можно заменить с помощью fgets () в сочетании с циклом while():

fp = fopen(".\\somefilename.txt", "r");
if(fp)
{
    while(fgets(line, sizeof(line, fp))
    {
        // parse line to ignore first two words using strtok() or strchr()
    }
    fclose(fp);
}fclose(fp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...